나는 이미 asked에 대해 살균 및 탈출에 관한 질문을했지만 나는 답변을 얻지 못했음을 알고 있습니다.사용자 입력 및 출력 이스케이프 처리
좋아, 여기 있습니다. 나는 PHP 스크립트를 가지고 있고 그것이 문제 것, MySQL 데이터베이스에서 사용자의 입력과 SELECT
을 GET
경우 내가 htmlspecialchars
, htmlentities
또는 strip_tags
및 중 하나를 사용하여 <
및 >
탈출하지 않은 경우/보안 위험 수 따라서 데이터베이스에서 HTML 태그를 선택/검색 할 수 있습니까? 입력이 trim()
, mysql_real_escape_string
및 addcslashes
(\ % _)을 사용하여 이미 삭제 되었기 때문에.
htmlspecialchars
를 사용하는 문제는 사용자의 입력이 가능하도록되어 앰퍼샌드 (&), 탈출이다 (필자는 동일 htmlentities
간다 생각을?). strip_tags
을 사용하면 "John"과 같이 PHP 스크립트가 John에게 결과를 선택하고 표시하게됩니다.
if(isset($_GET['query'])) {
if(strlen(trim($_GET['query'])) >= 3) {
$search = mysql_real_escape_string(addcslashes(trim($_GET['search']), '\%_'));
$sql = "SELECT name, age, address WHERE name LIKE '%".$search."%'";
[...]
}
}
그리고 여기는 디스플레이 내 출력된다 : 여기
데이터베이스에서 선택하기 전에, 입력 살균 내 PHP 코드 인 "X 정합 Y 결과."echo htmlspecialchars(strip_tags($_GET['search']), ENT_QUOTES, 'UTF-8')." matched y results.";
대상 환경에 대해 위생/이스케이프 처리를 수행해야합니다. html은 SQL에 영향을 줄 수 없으므로 DB에 이스케이프 처리하지 않아도 안전합니다. 사실, 브라우저 컨텍스트에서 검색하고 표시하려고 시도 할 때까지 이스케이프하지 않는 것이 좋습니다. 실제로 무언가를 검색하는 경우 이스케이프 처리하지 않아도되며 두 번 이스케이프 처리가 필요하지 않습니다.'& amp;' –
알겠습니다. 고마워요. 그래서, 내가 옳은 것 같아, 그렇지? – AnonymousJ
no. 당신은 더 이상 사용되지 않는 mysql _ *() 함수이다. mysqli 또는 PDO로 전환한다. addcslashes() 호출을 제거하십시오. 불필요하며 단순히 db의 데이터에 무의미한 탈출구를 추가합니다. mysql_real_escape_string은 쿼리에서 폼 데이터를 안전하게 사용하는 유일한 방법이다. –