PHP表单处理篇:
表单在Web应用程序中被广泛使用,提交的方式主要是GET和POST两种,鉴于这两种方式的安全性考虑,一般提交敏感的数据必须使用POST,而一些不敏感的数据方式可选择GET,它们的区别:GET方式提交的数据,都在URL后作为参数显示,对外界客户是明文的;而POST方式,提交的数据都嵌入到了HTTP请求头中,不明文给客户端,所以更加安全,但是仅仅它们自提供的安全限制还不够,是不能防止黑客进行攻击的,所以下面结合登录例子总结下表单的验证处理流程和规则(技术讨论群:489451956(新)),具体如下:
1、表单处理
HTML表单代码片段:
<form id="form_userlogin"method='post' action="
<form id="form_userlogin"method='post' action="http://127.0.0.1/Study/Php/formHandleSafe" >
<table width="220px"border="0" cellspacing="15"cellpadding="0">
<tr>
<td><div>
账 号:
</div></td>
<td><input name="account"id="account"></input></td>
</tr>
<tr>
<td><div>
密 码:
</div></td>
<td><input name="password"type="password" id="password"></input></td>
</tr>
</table>
</form>
JavaScript代码片段:
//登录事件监听引用jquery
$("#action_userlogin").click(function() {
var account = $("#account").val();
var password = $("#password").val();
// 进行简单的为空判断实际应该增加更多验证
if("" ==account || "" == password) {
alert("账号或密码不能为空哦!");
return;
}
// 提交表单
$.post($("#form_userlogin").attr("action"),
{
account:account,
password:password
},
function(data,status){
if(status == "success")
alert(data);
else
alert("登录失败!请查看服务端逻辑是否问题!");
});
});
php代码片段:
这里的php代码只是返回前端请求返回的内容:
echo "恭喜,登录成功!";
结果(前端校验):
2、表单验证
这里的表单验证,主要是对用户传递的参数进行验证和过滤,防止XSS攻击等,具体如下:
php代码片段:
// 变量声明并初始化
$account= $password = '';
if($_SERVER['REQUEST_METHOD'] == "POST") {
$account= $this->paramsSafeHandle($_POST['account']);
$password= $this->paramsSafeHandle($_POST['password']);
}
// 登录逻辑(这里省略)
if(empty($account) || empty($password)) {
echo '用户名或密码不能为空哦!';
}
echo "恭喜,登录成功!";
下面为核心的请求表单参数验证:
// 处理表单参数验证
function paramsSafeHandle($data) {
$data= trim($data); // 去除不必要的字符如:多余的空格、制表符、换行等
$data= stripslashes($data); // 删除用户输入的反斜杠
$data= htmlspecialchars($data);// 将特殊字符转为html实体类型可防止XSS
return $data;
}
3、表单必填
// 登录逻辑(这里省略实际这里要处理登录的正常逻辑)
if(empty($account) || empty($password)) {
echo '用户名或密码不能为空哦!';
}
4、参数验证
/**
* 邮箱格式校验
*/
function email($email) {
$rule= "/([\w\-]+\@[\w\-]+\.[\w\-]+)/";
if(!preg_match($rule, $email)) {
return false;
}
return true;
}
5、表单完成
总结下,表单的处理过程:前端Html页面检验->php表单参数验证->表单必填->表单参数格式规则校验。详细代码如下:
php代码片段:
// 变量声明并初始化
$account= $password = '';
if($_SERVER['REQUEST_METHOD'] == 'POST') {
// 表单数据过滤
$account= $this->paramsSafeHandle($_POST['account']);
$password= $this->paramsSafeHandle($_POST['password']);
// 登录逻辑(这里省略)
if(empty($account) || empty($password)) {
echo '用户名或密码不能为空哦!';
return;
}
// 表单数据格式规则校验
$status= email($account);
if(!$status) {
echo '用户名的格式不对,请认真核对!';
return;
}
echo "恭喜,登录成功!";
}
结果:
到这里,我们已经比较安全的处理了表单的提交整个过程了。