플랫폼 : PHP & MySQL을 내 실험의 목적PHP & mySQL : 정확히 htmlentities를 사용할 때?
, 나는 내 자신의 웹 사이트에 XSS 주사 나 자신의 몇 가지를 시도했습니다. 양식 텍스트 입력이있는 상황을 고려하십시오. 이것은 텍스트 영역이므로 텍스트 및 모든 종류의 (영문) 문자를 입력 할 수 있습니다. 내 관찰 결과는 다음과 같습니다.
A). strip_tags와 mysql_real_escape_string 만 적용하고 데이터베이스에 데이터를 삽입하기 직전에 입력에 htmlentities를 사용하지 않으면 쿼리가을 깨고 비정상 종료로 인해 내 테이블 구조를 표시하는 오류가 발생합니다.
B). 데이터베이스에 데이터를 삽입하기 전에 strip_tags, mysql_real_escape_string 및 htmlentities를 입력 할 경우 쿼리가을 깨뜨리지 않아 성공적으로 데이터 영역의 데이터를 데이터베이스에 삽입 할 수 있습니다.
그래서 나는 htmentities를 반드시 사용해야 만하지만 정확하게 사용해야하는지 확신 할 수 없다는 것을 알고 있습니다. 위를 염두에두고 다음과 같이 알고 싶습니다.
정확히 htmlentities를 사용해야합니까? 데이터를 DB에 삽입하기 전에 사용해야하거나 DB에 데이터를 가져 와서 DB에서 데이터를 표시하려고 할 때 htmlentities를 적용해야합니까?
위의 B)에서 설명한 방법 (필자가 가장 분명하고 효율적인 해결책이라고 생각합니다)을 따르면 DB에서 데이터를 표시하려고 할 때 htmlentities를 적용해야합니까? ? 그렇다면 왜? 그렇지 않다면 왜 안 되겠습니까? 의 html_entity_decode : http://shiflett.org/blog/2005/dec/google-xss-example
그런이라는 또 하나의 PHP 함수가 : 나는에 게시물을 거친 후에 정말 나를 위해 혼란 있기 때문에 나는이를 부탁드립니다. htmlentities가 입력에 적용 되었기 때문에 DB에서 내 데이터를 표시 할 수 있습니까 (B 단계에 표시된 절차를 따른 후)? 어느 것이 좋습니다 : html_entity_decode 및 htmlentities 언제?
미리보기 페이지 : 내가 여기에 특정 상황을 좀 더 구체적인 세부 사항을 추가하는 데 도움이 될 생각
. '미리보기'페이지가 있다고 가정하십시오. 이제 텍스트 영역의 입력을 제출하면 미리보기 페이지가 입력을 받아 HTML로 표시하고 숨겨진 입력이이 입력을 수집합니다. 미리보기 버튼의 제출 버튼을 누르면 숨겨진 입력의 데이터가 새 페이지로 POST되고 해당 페이지는 숨겨진 입력에 포함 된 데이터를 DB에 삽입합니다. 양식을 처음 제출할 때 htmlentities를 적용하지 않고 (strip_tags 및 mysql_real_escape_string 만 적용) 텍스트 영역에 악의적 인 입력이있는 경우 숨겨진 입력이 손상되고 숨겨진 입력의 마지막 몇 문자가 페이지에서 " />
으로 표시됩니다 이는 바람직하지 못하다. 이를 염두에두고, 미리보기 페이지에서 숨겨진 입력의 무결성을 유지하고 숨겨진 입력에서 데이터를 수집하여 손상시키지 않도록해야합니다. 어떻게해야합니까? 이 정보 게시 지연에 대해 사과하십시오.
미리 감사드립니다.
팁 : 대부분의 경우 htmlentities는 사용하지 말고 htmlspecialchars를 사용해야합니다. htmlentities는 많은 문자를 변환하지만 htmlspecialchars는 변환해야하는 문자 만 변환합니다. –
@Michael Madsen : 팁 주셔서 감사합니다. 이 양식은 미국 기반 키보드를 사용하여 입력 할 수있는 모든 입력을 허용합니다. 그래서 htmlentities를 사용하면 다른 웹 사이트 나 자체 시스템의 일부 이상한 문자를 수동으로 복사하여 붙여 넣으려고 할 때 htmlentities를 사용하면 더 안전하게 만들 수 있다는 생각이 들었습니다. 그래서 htmlentities를 사용하기로했습니다. 어떻게 생각해? – Devner
아무런 의미가 없습니다. 네, 이상한 캐릭터가 보일 수 있습니다 ... 음, 사이트에서 이상합니다. 그러나 엔티티는 동일한 문자를 표현하는 다른 방식 일 뿐이므로 htmlentities를 사용하여 피할 수는 없습니다. 그들은 HTML에서 특별한 의미가 없기 때문에 번역 할 때 이점이 없습니다. 최종 결과는 똑같이 보일 것이며, 더 많은 바이트를 사용하게 될 것입니다. –