PHP 양식 유효성 검사
이 장에서는 PHP를 사용하여 클라이언트가 제출한 양식 데이터를 확인하는 방법을 소개합니다.
PHP 양식 유효성 검사
|
온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요
字段 | 验证规则 |
---|---|
名字 | 必须。 +只能包含字母和空格 |
必须。 + 必须是一个有效的电子邮件地址(包含'@'和'.') | |
网址 | 必须。如果存在,它必须包含一个有效的URL |
备注 | 必须。 多行输入字段(文本域) |
性别 | 必须。 必须选择一个 |
위의 양식 유효성 검사 규칙은 다음과 같습니다.
먼저 순수 HTML을 살펴보세요. 양식 코드:
텍스트 필드"이름", "이메일" 및 "웹사이트" 필드는 텍스트 입력 요소이고 " 비고' 필드는 텍스트 영역. HTML 코드는 다음과 같습니다.
“名字”: <input type="text" name="name"> E-mail: <input type="text" name="email"> 网址: <input type="text" name="website"> 备注: <textarea name="comment" rows="5" cols="40"></textarea>라디오 버튼
<input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男양식 요소
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">이 양식은
什么是 $_SERVER["PHP_SELF"] 变量? $_SERVER["PHP_SELF"]是超级全局变量,返回当前正在执行脚本的文件名,与 document root相关。 |
<🎜>$_SERVER["PHP_SELF"] 변수가 무엇인가요?<🎜><🎜>< 🎜 > $_SERVER["PHP_SELF"]는 현재 실행 중인 스크립트의 파일 이름을 반환하는 슈퍼 전역 변수이며 문서 루트와 관련됩니다. |
따라서 $_SERVER["PHP_SELF"]는 다른 페이지로 이동하는 대신 현재 페이지로 양식 데이터를 보냅니다.
htmlspecialchars() 메서드가 무엇인가요?
htmlspecialchars() 함수 미리 정의된 일부 문자를 HTML 엔터티로 변환합니다. 미리 정의된 문자는 다음과 같습니다.
|
다음 양식 파일 이름을 "test_form.php"로 지정합니다.
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">이제 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라는 주소를 입력할 것이라는 점을 고려하면 위 URL은 다음 코드로 구문 분석되어 실행됩니다.
<form method="post" action="test_form.php/"><script>alert('hacked')</script>가 코드에 스크립트 태그를 추가하고 경고 명령을 추가했습니다. 이 Javascript 코드는 페이지가 로드될 때 실행됩니다(사용자에게 팝업 상자가 표시됨). 이는 해커가 PHP_SELF 변수를 어떻게 악용할 수 있는지 보여주는 간단한 예입니다.
<script> 태그에는 모든 JavaScript 코드를 추가할 수 있습니다. 해커는 이를 이용해 페이지를 다른 서버의 페이지로 리디렉션할 수 있습니다. 악성 코드는 코드 파일에서 보호할 수 있으며, 해당 코드는 전역 변수를 수정하거나 사용자의 폼 데이터를 얻을 수 있습니다.
$_SERVER["PHP_SELF"]가 악용되는 것을 방지하는 방법은 무엇입니까?
$_SERVER["PHP_SELF"]는 htmlspecialchars() 함수를 사용하여 방지할 수 있습니다.
양식 코드는 다음과 같습니다.
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">htmlspecialchars() 일부 사전 정의된 문자를 HTML 엔터티로 변환합니다. 이제 사용자가 이점을 활용하고 싶다면 PHP_SELF 변수에 대한 결과는 다음과 같이 출력됩니다.
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">가 이 취약점을 시도하지 못했습니다!
PHP를 사용하여 양식 데이터 유효성 검사
먼저 PHP의 htmlspecialchars() 함수를 통해 사용자가 제출한 모든 데이터를 처리합니다.
htmlspecialchars() 함수를 사용할 때 사용자가 다음 텍스트 필드를 제출하려고 하면:
<script>location.href('http://www.php.cn')</script>코드는 HTML 이스케이프로 저장되므로 실행되지 않습니다. 코드는 다음과 같습니다.
<script>location.href('http://www.php.cn')</script>위 코드는 안전하며 페이지에 정상적으로 표시되거나 이메일에 삽입될 수 있습니다.
사용자가 양식을 제출하면 다음 두 가지 작업을 수행합니다.
1. PHP Trim() 함수를 사용하여 양식에서 관련 없는 정보를 제거합니다. 사용자 입력 데이터 필수 문자(예: 공백, 탭, 줄 바꿈)
2. PHP Stripslashes() 함수를 사용하여 사용자 입력 데이터()에서 백슬래시를 제거합니다.
다음으로 이를 필터링해 보겠습니다. 함수는 다음과 같습니다. 우리가 정의한 함수에 코드의 재사용성을 크게 향상시킬 수 있습니다.
함수 이름을 test_input()으로 지정합니다.
이제 test_input() 함수를 통해 $_POST의 모든 변수를 감지할 수 있습니다. 스크립트 코드는 다음과 같습니다.
Instance
<!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="Submit"> </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이면 양식이 제출되고 데이터의 유효성이 검사됩니다. 양식이 제출되지 않으면 유효성 검사를 건너뛰고 공백으로 표시됩니다.
위 예시에서 입력항목의 사용은 선택사항으로, 사용자가 아무런 데이터를 입력하지 않아도 정상적으로 표시될 수 있습니다.
권장 실무 튜토리얼: "PHP 양식 유효성 검사"
다음 장에서는 PHP 양식 유효성 검사를 수행하는 방법을 소개합니다. 사용자.