보안관련 질문입니다.
보안을 위해서 GET, POST 를 사용할 때 아래와 같이 이런저런 함수로 점검한다는 글을 보았습니다.
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
...
꼭 이렇게 까지 해야 하나요?
그냥 htmlspecialchars() 하나만 사용하면 보안에 취약한가요?
꼭 이렇게 겹겹이 쌓아야 하는 이유가 뭔지, 또 그렇다면 php 자체에서 이런 여러가지 함수를 묶은 기능을 하는 함수는 없는지 궁금합니다.
답변 2개 / 댓글 2개
보안하고 큰 차이는 없습니다.
다만 이중 삼중으로 체크를한다고해서 나쁠건 없지만
$_POST 데이터에 굳이 여러 검증을 넣는이유는
db에 입력될때 sql문을 같이 넣을경우 db에 오류가 발생할 수 있기 때문입니다.
post보다는 get이 더 위험하다고 할수있는데
크게 중요한 데이터가 아니라면 굳이 사용하지 않아도됩니다.
답변에 대한 댓글 1개
$data = trim($data); // 양쪽 공백 제거
$data = stripslashes($data); // addslashes() 함수에 의해 추가된 백슬래시 제거
$data = htmlspecialchars($data); // 태그를 HTML실체값으로 변환
위 3개의 함수가 모두 용도가 다릅니다.
보안만 고려하면 말씀하신 것처럼 htmlspecialchars만으로 충분하지만,
변수값의 원활한 활용을 위해서는 모두 해주는 게 좋겠지요.
답변에 대한 댓글 1개
답변을 작성하려면 로그인이 필요합니다.
저는 DB에 query를 보낼 mysqli_real_escape_string() 으로 처리해서 넣고,
반대로 DB 에서 가져와서는 htmlspecialchars() 로 처리해서 보여 주려고 합니다.
이 두가지면 충분할까요??
검색하다 보면 하도 겁들을 많이 주어서 웬지 불안해요...ㅠ