이 항목이 너무 잘못입니다!
사용자의 입력을 필터링하면 안됩니다. 그 사람이 입력 한 정보입니다. 비밀번호를 다음과 같이 설정하려면 어떻게 할 것입니까? '"'>s3cr3t<script>alert()</script>
문자를 필터링하고 변경된 비밀번호로 남겨두면 처음 로그인해도 성공하지 못합니까? 이것은 나쁘다.
적절한 해결책은 준비된 문이나 mysql_real_escape_string()
을 사용하여 SQL 주입을 피하고 문맥 인식 이스케이프 처리를 사용하여 html 코드가 엉망이되는 것을 방지하는 것입니다.
웹은 사용자가 입력 한 정보를 나타낼 수있는 방법 중 하나임을 상기시켜드립니다. 일부 데스크톱 소프트웨어에서 그러한 스트리핑을 허용한다면 어떻습니까? 나는 당신의 대답이 NO이고 이것이 올바른 방법이 아닌 이유를 이해할 수 있기를 바랍니다.
다른 컨텍스트에서 다른 문자를 이스케이프해야한다는 점에 유의하십시오. 당신이 거 어떻게하는 사용자가 자신의 이름을 설정 한 경우
<span title="{$user->firstName}">{$user->firstName}</span>
그러나, '"><script>window.document.location.href="http://google.com"</script>
처럼 될 : 당신이 툴팁으로 사용자 이름을 표시해야하는 경우 예를 들어, 같은 것을 사용할 것인가? 따옴표를 제거 하시겠습니까? 이것은 너무 잘못 될 것입니다! 이 비 감각을 수행하는 대신 데이터를 렌더링하는 동안 인용 부호를 이스케이프하는 것이 좋습니다.
값 자체를 렌더링하는 동안 고려해야 할 또 다른 컨텍스트가 있습니다. 이전에 사용 된 html 코드를 고려하고 사용자 이름이 <textarea>
인 것으로 상상하십시오. 이렇게하면이 텍스트 영역에 이어지는 모든 HTML 코드가 래핑되어 전체 페이지가 분리됩니다.
다시 한 번 - 사용중인 컨텍스트에 따라 데이터 이스케이프를 고려하십시오!
P.S 해당 부정 투표에 대해 어떻게 대응해야할지 잘 모르겠습니다. 너, 사람들, 내 답장을 실제로 읽는거야?
dupe : http://stackoverflow.com/questions/129677/whats-the-best-method-for-sanitizing-user-input-with-php – troelskn
이 접근법은 많은 측면에서 잘못되었습니다! 아래에 답변을 게시하고 각 응답에 대해 -1 명의 작성자가 생각하기를 거부했다고 평가했습니다. –