PHP表单之表单验证
一、表单安全
1、htmlspecialchars()函数
把特殊字符转换为 HTML 实体。这意味着 之类的 HTML 字符会被替换为 < 和 > 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。
跨站点脚本攻击(Cross Site Scripting):为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。
HTML 实体:HTML 中的预留字符必须被替换为字符实体。如果希望正确地显示预留字符,我们必须在 HTML 源代码中使用字符实体(character entities)。
空格 | |||
小于号 | < | < | |
> | 大于号 | > | > |
& | 和号 | & | & |
“ | 引号 | " | " |
‘ | 撇号 | ' (IE不支持) | ' |
¢ | 分 | ¢ | ¢ |
£ | 镑 | £ | £ |
¥ | 日圆 | ¥ | ¥ |
? | 欧元 | € | € |
§ | 小节 | § | § |
© | 版权 | © | © |
® | 注册商标 | ® | ® |
? | 商标 | ™ | ™ |
× | 乘号 | × | × |
÷ | 除号 | ÷ | ÷ |
一个简单的加法器(注意看其中的htmlspecialchars)
<html><body><form method='post' action='<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>'><input type="text" pattern="[0-9]*" name="left">+<input type="text" pattern="[0-9]*" name="right">=<input type="submit" value="计算"></form></body></html><?php echo $_POST['left']+$_POST['right']; ?>
2、创建表单验证函数
<html><head><title>表单测试</title></head><body><?php $name = $email = $website=$comment=""; function format_input($data){ $data=trim($data);#去除首尾多余的空白符 $data=stripcslashes($data);#去除用户输入的反斜杠 $data=htmlspecialchars($data);#转化为html实体 return $data; } if($_SERVER['REQUEST_METHOD']=="POST"){ $name=format_input($_POST['name']); $email=format_input($_POST['email']); $website=format_input($_POST['website']); $comment=format_input($_POST['comment']); } ?><form method="POST" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>">姓名:<input type="text" name="name" /><br /><br />电邮:<input type="text" name="email" /><br /><br />网址:<input type="text" name="website" /><br /><br />评论:<textarea cols="22" rows="5" name="comment"></textarea><br /><br /><input type='submit' value='提交' /></form><?php echo "<br />name:".$name; echo "<br />email:".$email; echo "<br />website:".$website; echo "<br />comment:".$comment; ?></body></html>
Name | 必需。必须包含字母和空格。 |
必需。必须包含有效的电子邮件地址(包含 @ 和 .)。 | |
Website | 可选。如果选填,则必须包含有效的 URL。 |
Comment | 可选。多行输入字段(文本框)。 |
<html> <head> <title>表单必填</title> <style> .error {color:#FF0000;} </style> </head> <body> <?php $name = $email = $website=$comment=""; $nameErr=$emailErr=$websiteErr=$commentErr=""; function format_input($data){ $data=trim($data);#去除首尾多余的空白符 $data=stripcslashes($data);#去除用户输入的反斜杠 $data=htmlspecialchars($data);#转化为html实体 return $data; } if($_SERVER['REQUEST_METHOD']=="POST"){ if(empty($_POST['name'])) $nameErr="姓名是必填的!"; else $name=format_input($_POST['name']); if(empty($_POST['email'])) $emailErr="邮箱是必填的!"; else $email=format_input($_POST['email']); $website=format_input($_POST['website']); $comment=format_input($_POST['comment']); } ?> <form method="POST" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>"> 姓名:<input type="text" name="name" /> <span class="error">*<?php echo $nameErr; ?></span> <br /><br /> 电邮:<input type="text" name="email" /> <span class="error">*<?php echo $emailErr; ?></span> <br /><br /> 网址:<input type="text" name="website" /> <br /><br /> 评论:<textarea cols="22" rows="5" name="comment"></textarea> <br /><br /> <input type='submit' value='提交' /> </form> <?php echo "<br />name:".$name; echo "<br />email:".$email; echo "<br />website:".$website; echo "<br />comment:".$comment; ?> </body> </html>
利用正则表达式(Regular Expression)对用户输入的数据进行格式验证。更多有关正则表达式的知识请看正则表达式30分钟入门教程以及正则表达式全部符号解释。
int preg_match ( string $pattern , string $subject );
搜索subject与pattern给定的正则表达式的一个匹配。
Regex quick reference
[abc] | A single character: a, b or c |
[^abc] | Any single character but a, b, or c |
[a-z] | Any single character in the range a-z |
[a-zA-Z] | Any single character in the range a-z or A-Z |
^ | Start of line |
$ | End of line |
\A | Start of string |
\z | End of string |
. | Any single character |
\s | Any whitespace character |
\S | Any non-whitespace character |
\d | Any digit |
\D | Any non-digit |
\w | Any word character (letter, number, underscore) |
\W | Any non-word character |
\b | Any word boundary character |
(…) | Capture everything enclosed |
(a | b) |
a? | Zero or one of a |
a* | Zero or more of a |
a+ | One or more of a |
a{3} | Exactly 3 of a |
a{3,} | 3 or more of a |
a{3,6} | Between 3 and 6 of a |
1、匹配姓名
“/^[a-zA-Z ]*$/”
只允许空格和字母,”^”表示开头,”$”表示结尾,[a-zA-Z ]表示a-z或者A-Z或者空格中的一个字符。
$name = test_input($_POST["name"]);if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $nameErr = "只允许字母和空格!"; }
2、匹配E-mail
“/([\w-]+\@[\w-]+.[\w-]+)/”
“\w”匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’;
+匹配前面的子表达式一次或多次;
“-“匹配”-“。
3、匹配URL
“/\b(?:(?:https?|ftp):\/\/|www.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i”
四、保留表单中的值原理:在input标签中嵌入PHP脚本。
如果type=”text”,那么就嵌入value=””
如果type=”radio”,那么就嵌入
最后写了一个简单的登录表单:
<html><head><title>一个简易的登录表单</title></head><body><?php $email = $passwd =""; $emailErr=$passwdErr=""; if($_SERVER['REQUEST_METHOD']=='POST'){ if(empty($_POST['email'])) $emailErr='请输入邮箱!'; else if(preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$_POST['email'])) $email=clear_input($_POST['email']); else $emailErr="请输入有效的邮箱!"; if(empty($_POST['passwd'])) $passwdErr='请输入密码!'; else $passwd=clear_input($_POST['passwd']); } function clear_input($data){ $data=trim($data); $data=stripcslashes($data); $data=htmlspecialchars($data); return $data; } ?><form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">邮箱:<input type="text" name="email" value="<?php echo $email;?>" /><span class='error'><?php echo $emailErr;?></span><br />密码:<input type="password" name="passwd" value="<?php echo $passwd;?>"/><span class='error'><?php echo $passwdErr;?></span><br /><input type="submit" name="submit" value="登录"></form><?php echo "你输入的<br />"; echo "邮箱:".$email; echo "<br />"; echo "密码:".$passwd; ?></body></html>
版权声明:本文为Lshare原创文章,需要转载的请联系我,有问题欢迎评论或私信。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











종종 키워드와 추적 매개 변수로 혼란스러워하는 긴 URL은 방문자를 방해 할 수 있습니다. URL 단축 스크립트는 솔루션을 제공하여 소셜 미디어 및 기타 플랫폼에 이상적인 간결한 링크를 만듭니다. 이 스크립트는 개별 웹 사이트 a에 유용합니다

Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

이것은 Laravel 백엔드가있는 React Application을 구축하는 데있어 시리즈의 두 번째이자 마지막 부분입니다. 이 시리즈의 첫 번째 부분에서는 기본 제품 목록 응용 프로그램을 위해 Laravel을 사용하여 편안한 API를 만들었습니다. 이 튜토리얼에서는 Dev가 될 것입니다

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> 'Hello World', 'github.com'=> [ 'foo'=> 'bar'], 'forge.laravel.com'=>

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

2025 PHP Landscape Survey는 현재 PHP 개발 동향을 조사합니다. 개발자와 비즈니스에 대한 통찰력을 제공하는 프레임 워크 사용, 배포 방법 및 과제를 탐색합니다. 이 조사는 현대 PHP Versio의 성장을 예상합니다

이 기사에서는 Laravel 웹 프레임 워크에서 알림 시스템을 탐색 할 것입니다. Laravel의 알림 시스템을 사용하면 다른 채널을 통해 사용자에게 알림을 보낼 수 있습니다. 오늘은 알림을 보낼 수있는 방법에 대해 논의합니다
