필수 및 최대 _ 길이로 보통 form validation을 수행하고 분명히 데이터베이스로 푸시하기 전에 xss 필터링을 수행해야합니다. htmlspecialchars는 태그에없는 문자에만 적용되어야하므로 htmlspecialchars를 직접 수행 할 수 없습니다. "<br/>
"또는 "<b>
"와 같은 태그 요소를 제거 (및 저장),하지만 그 내용은, 그것은 "<b>
"와 "</b>
"내부 아무 의미 -
1 : 당신은 할 필요가있다. 아마도 preg_match으로이 작업을 수행 할 수 있습니다.
2 - 남아있는 모든 텍스트
3를 htmlentities를 실행 -
strip_tags (string $str [, string $allowable_tags ])
4 (태그의 저장 무리에서) 모든 원치 않는 명시 적 태그를 제거 - 다음 속성과 내용에 대해 허용 된 태그를 필터링 . 해커가이 문제를 해결하려면
<b onMouseOver="window.open(..)"></b>
과 같은 코드를 사용하여, 하나는 여분의 약간의 작업을 수행하고 아마 정규식-ES와 함께 작동해야하는 것은 드문 일이 아니다. 좀 더 많은 샘플 코드를 작성하길 원한다면 알려주십시오.
6 - 태그 요소를 다시 문서에 다시 추가합니다.
나는 기본적으로 이것을 바로 요리했습니다. 알고리즘의 효율성을 높일 수 있습니다 (즉, 원하지 않는 태그를 먼저 제거한 다음 html 엔티티 및 태그 내용을 필터링하는 것으로 진행).하지만 그 내용은 귀하에게 맡깁니다.
지금까지 내가 해킹 할 가능성이있는 한 멀리 있습니다. 입력을 해킹 할 수있는 다른 방법이있을 수 있으므로 phpbb forum system과 같이 유효성 검사에 사용되는 다른 설명 상자 시스템을 확인하고 싶을 수 있습니다. 또 다른 옵션은 phpbb 대괄호 형식을 사용하여 태그를 처리하는 것이므로 사용자가 모든 HTML 태그를 입력 할 수 없으며 사용자가 제어하는 대괄호 태그를 대신 사용할 수 있습니다.
귀하의 질문에 대한 답변이 있습니까?
데이터베이스에 넣기 전에'htmlspecialchars'를 통해 실행해서는 안 * 않습니다 *. 탈출 할 때 데이터를 다른 용도로 사용할 수 있도록 마지막 순간에 수행해야합니다. 이 경우 페이지에 출력 할 때'htmlspecialchars'가되어야합니다. –
HTML을 전혀 원하지 않으면 입력시'strip_tags'를 사용하십시오. –