PHP 양식을 다룰 때는 보안을 고려해야 합니다.
이 장에서는 해커와 스팸을 방지하기 위해 PHP 양식 데이터의 보안 처리를 보여줍니다.
이 장에 소개된 HTML 양식에는 다음 입력 필드가 포함되어 있습니다. 선택적 텍스트 필드, 라디오 버튼과 연결되어야 함 , 제출 버튼:
Instance
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>PHP.cn</title> </head> <body> <h2>PHP 表单验证实例</h2> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 名字: <input type="text" name="name" value=""> <br> E-mail: <input type="text" name="email" value=""> <br> 网址: <input type="text" name="website" value=""> <br> 备注: <textarea name="comment" rows="5" cols="40"></textarea> <br> 性别: <input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男 <br> <input type="submit" name="submit" value="提交"> </form> </body> </html>
프로그램 실행 결과:
위 양식 유효성 검사 규칙은 다음과 같습니다.
| <🎜> 유효성 검사 규칙<🎜><🎜> | ||||||||||||
이름 | 필수입니다. +문자와 공백만 포함할 수 있습니다 | ||||||||||||
이메일 | URL | 선택사항. 있는 경우 유효한 URL을 포함해야 합니다. | |||||||||||
비고 | 텍스트 필드
'이름', '이메일', '웹사이트' 필드는 텍스트 입력 요소이고, '비고' 필드는 텍스트 영역 텍스트 영역입니다. HTML 코드는 다음과 같습니다.
라디오 버튼 "성별" 필드는 라디오 버튼입니다. HTML 코드는 다음과 같습니다.
양식 요소 HTML 양식 코드는 다음과 같습니다.
양식은 데이터를 제출하기 위해 method="post" 메소드를 사용합니다. $_SERVER["PHP_SELF"] 변수가 무엇인가요? $_SERVER["PHP_SELF"]는 현재 실행 중인 스크립트의 파일 이름을 반환하는 슈퍼전역 변수입니다. 따라서 $_SERVER["PHP_SELF"]는 다른 페이지로 이동하는 대신 양식 데이터를 페이지 자체로 보냅니다. 이러한 방식으로 사용자는 양식 페이지에서 오류 메시지 정보를 얻을 수 있습니다. htmlspecialchars() 함수가 무엇인가요? htmlspecialchars() 함수는 특수 문자를 HTML 엔터티로 변환합니다. 이는 < 및 >와 같은 HTML 문자가 < 이렇게 하면 공격자가 HTML 또는 JavaScript 코드를 양식에 삽입하여 코드를 악용하는 것을 방지할 수 있습니다(교차 사이트 스크립팅 공격). PHP 양식 보안에 대한 중요 팁 $_SERVER["PHP_SELF"] 변수는 해커에 의해 악용될 수 있습니다! 페이지에서 PHP_SELF를 사용하는 경우 사용자는 밑줄을 입력하고 CSS라고도 하는 XSS(교차 사이트 스크립팅)를 실행할 수 있습니다. 와 함께 XSS를 사용하면 공격자는 다른 사용자가 보는 웹 페이지에 클라이언트 측 스크립트를 입력할 수 있습니다. 다음 형식의 "test_form.php"라는 페이지가 있다고 가정합니다.
이제 URL을 사용하여 제출 주소 "test_form.php"를 지정합니다. 위 코드는 다음과 같이 수정됩니다. <form method=" post " action="test_form.php">그러나 사용자가 브라우저 주소 표시줄에 다음 주소를 입력한다는 점을 고려하세요.http://www.php.cn/test_form.php/% 22 %3E%3Cscript%3Ealert('hacked')%3C/script%3E <form method="post" action="test_form.php/"><script>alert('hacked')</script> 코드에 스크립트 태그가 추가되었고, 경고 명령이 추가되었습니다. 이 Javascript 코드는 페이지가 로드될 때 실행됩니다(사용자에게 팝업 상자가 표시됨). 이는 해커가 PHP_SELF 변수를 어떻게 악용할 수 있는지 보여주는 간단한 예입니다. 참고 모든 JavaScript 코드를 <script> 태그에 추가할 수 있습니다! 해커는 이를 이용해 페이지를 다른 서버로 리디렉션할 수 있습니다. 해당 코드는 악성 코드를 보호하거나 사용자의 양식 데이터를 얻을 수 있습니다. $_SERVER["PHP_SELF"] 악용을 방지하는 방법은 무엇입니까? $ _SERVER ["PHP_SELF"]는 htmlspecialchars() 함수를 사용하여 피할 수 있습니다. 폼 코드는 다음과 같습니다:
htmlspecialchars() 미리 정의된 일부 문자를 HTML 엔터티로 변환합니다. 이제 사용자가 PHP_SELF 변수를 활용하려는 경우 결과는 다음과 같이 출력됩니다.
이 취약점을 시도하지 못했습니다! PHP를 통해 양식 데이터 유효성 검사
가장 먼저 해야 할 일은 PHP의 htmlspecialchars() 함수를 통해 모든 변수를 전달하는 것입니다. htmlspecialchars() 함수를 사용한 후 사용자가 텍스트 필드에 다음을 제출하려고 하면:
- 코드는 다음과 같이 이스케이프 코드로 저장되므로 실행되지 않습니다.
이제 이 코드는 페이지에 표시되는 온라인이나 이메일로 안전합니다. 사용자가 양식을 제출하면 다음 두 가지 작업을 더 수행해야 합니다. 1. (PHP Trim() 함수를 통해) 사용자 입력 데이터에서 불필요한 문자(추가 공백)를 제거합니다. , 탭, 줄 바꿈) 2. (PHP 스트립슬래시() 함수를 통해) 사용자 입력 데이터에서 백슬래시 제거() 다음으로 검사 함수를 만듭니다(코드를 반복해서 작성하는 것과 비교). 더욱 효율적으로 만듭니다). 함수 이름을 test_input()으로 지정했습니다. 이제 test_input() 함수를 통해 각 $_POST 변수를 확인할 수 있습니다. 스크립트는 다음과 같습니다. 예 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>PHP中文网(php.cn)</title> </head> <body> <?php // 定义变量并默认设置为空值 $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = test_input($_POST["name"]); $email = test_input($_POST["email"]); $website = test_input($_POST["website"]); $comment = test_input($_POST["comment"]); $gender = test_input($_POST["gender"]); } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> <h2>PHP 表单验证实例</h2> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 名字: <input type="text" name="name"> <br><br> E-mail: <input type="text" name="email"> <br><br> 网址: <input type="text" name="website"> <br><br> 备注: <textarea name="comment" rows="5" cols="40"></textarea> <br><br> 性别: <input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男 <br><br> <input type="submit" name="submit" value="提交"> </form> <?php echo "<h2>您输入的内容是:</h2>"; echo $name; echo "<br>"; echo $email; echo "<br>"; echo $website; echo "<br>"; echo $comment; echo "<br>"; echo $gender; ?> </body> 프로그램을 실행하고 살펴보세요 참고: 위 스크립트를 실행할 때 $_SERVER["REQUEST_METHOD"]를 사용하여 양식이 제출되었는지 감지합니다. REQUEST_METHOD가 POST이면 양식이 제출되고 데이터의 유효성이 검사됩니다. 양식이 제출되지 않으면 유효성 검사를 건너뛰고 공백으로 표시됩니다. 위 예시에서 입력항목의 사용은 선택사항으로, 사용자가 아무런 데이터를 입력하지 않아도 정상적으로 표시될 수 있습니다. 다음 장에서는 사용자가 입력한 데이터의 유효성을 검사하는 방법을 소개합니다. <!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>PHP.cn</title>
</head>
<body>
<h2>PHP 表单验证实例</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
名字: <input type="text" name="name" value="">
<br>
E-mail: <input type="text" name="email" value="">
<br>
网址: <input type="text" name="website" value="">
<br>
备注: <textarea name="comment" rows="5" cols="40"></textarea>
<br>
性别:
<input type="radio" name="gender" value="female">女
<input type="radio" name="gender" value="male">男
<br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
없음 |