2012-08-15 2 views
2

저는 Codeigniter의 의견 시스템에서 작업 중이며 어떤 유형의 유효성 검사 규칙을 사용해야하는지 조언 해 주시면 감사하겠습니다. 이미지 나 다른 HTML을 허용하고 싶지 않습니다.의견 양식에 대한 유효성 검사

지금까지 trimmax_length이 설정되었습니다. 또한 데이터베이스에 삽입하기 전에 htmlspecialchars을 통해 콘텐츠를 실행합니다. 전역으로 활성화 된 XSS 필터링이 있습니다.

다른 예방 조치를 취해야합니까? Javascript 또는 다른 악성 코드가 입력되는 것을 막기에 htmlspecialchars가 충분한가요?

+2

데이터베이스에 넣기 전에'htmlspecialchars'를 통해 실행해서는 안 * 않습니다 *. 탈출 할 때 데이터를 다른 용도로 사용할 수 있도록 마지막 순간에 수행해야합니다. 이 경우 페이지에 출력 할 때'htmlspecialchars'가되어야합니다. –

+0

HTML을 전혀 원하지 않으면 입력시'strip_tags'를 사용하십시오. –

답변

3

필수 및 최대 _ 길이로 보통 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 태그를 입력 할 수 없으며 사용자가 제어하는 ​​대괄호 태그를 대신 사용할 수 있습니다.

귀하의 질문에 대한 답변이 있습니까?

+0

네, 아주 좋은 답변입니다. 나는 HTMLPurifier에 대해 조사해 왔으며, 태그를 제대로 다루는 데 도움이 될 것이라고 생각한다. – Motive

관련 문제