데이터베이스 쿼리를 실행하고 PHP 및 MySQLI를 사용하여 HTML 페이지에 데이터를 출력 할 때 XSS (크로스 사이트 스크립팅 공격) 취약점을 피해야합니다. 이 유형의 취약점은 일반적으로 탈출이나 필터링없이 데이터베이스의 컨텐츠를 웹 페이지에 직접 출력 할 때 발생합니다.
콘텐츠를 안전하게 출력하려면 HTMLSpecialchars ()가 매우 유용한 도구입니다. HTML 특수 문자 (예 : < , > , & , " 등)를 HTML 엔티티로 변환하여 악의적 인 스크립트가 페이지에 주입되는 것을 방지합니다. mysqli_result 객체와 결합하여 데이터베이스 쿼리 결과를 얻을 수 있습니다. 콘텐츠를 안전하게 표시 할 수 있습니다.
다음은 htmlspecialchars () 와 함께 mysqli_result를 사용하는 방법을 보여주는 구체적인 예입니다.
<?php
// 데이터베이스 연결
$mysqli = new mysqli("localhost", "username", "password", "database");
// 연결을 확인하십시오
if ($mysqli->connect_errno) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
// 쿼리를 실행하십시오
$sql = "SELECT id, title, content FROM articles";
$result = $mysqli->query($sql);
if ($result && $result->num_rows > 0) {
echo "<h1>기사 목록</h1>";
echo "<ul>";
while ($row = $result->fetch_assoc()) {
// 사용 htmlspecialchars 탈출 출력
$title = htmlspecialchars($row['title'], ENT_QUOTES, 'UTF-8');
$content = htmlspecialchars($row['content'], ENT_QUOTES, 'UTF-8');
// 이 기사에 자세한 링크가 있다고 가정합니다
$articleUrl = "https://m66.net/article.php?id=" . urlencode($row['id']);
echo "<li>";
echo "<a href=\"$articleUrl\">$title</a><br>";
echo "<p>$content</p>";
echo "</li>";
}
echo "</ul>";
} else {
echo "발견 된 기사가 없습니다。";
}
// 연결을 닫으십시오
$mysqli->close();
?>
ENT_QUOTES 매개 변수는 단일 및 이중 인용문이 모두 피해를 보장합니다.
'UTF-8'은 인코딩으로 인한 우회 문제를 피하기 위해 문자 인코딩을 지정합니다.
URL을 구성 할 때는 urlencode ()를 사용하십시오
URL에 매개 변수를 삽입 해야하는 경우 urlencode ()를 사용하여 특수 문자가 URL 구조가 손상되지 않도록하십시오.
html <br>에서 직접 처리되지 않은 데이터를 스플릿하지 마십시오 데이터베이스 필드 값의 직접 출력은 매우 위험하며 제대로 처리해야합니다.
실제 프로젝트에서는 모든 데이터 출력을 브라우저로 탈출하는 습관을 개발하는 것이 보안 개발의 기본 요구 사항입니다. mysqli_result 및 htmlspecialchars () 의 쿼리 결과를 결합하여 대부분의 XSS 공격을 효과적으로 방지하고 웹 사이트 및 사용자의 보안을 보장 할 수 있습니다.
출력 기능 캡슐화 또는 템플릿 엔진 사용과 같은 추가 최적화가 필요한 부품이있는 경우 구성 할 수도 있습니다. 더 완전한 패키지 예제를 작성 하시겠습니까?
관련 태그:
HTML