启用全局过滤
在app/Request.php中设置:
<?php
namespace app;
// 应用请求对象类
class Request extends \think\Request
{
protected $filter = ['htmlspecialchars'];
}
设置后,会自动对所有input助手函数和Request对象的GET和POST请求数据进行过滤。
设置路由
设置路由后,可以隐藏ajax的提交页面,保护后台页面。 设置规则示例:
Route::rule('admin/login2','admin/login_post','POST');
前端提交到login2页面即可,保护后台真实接口地址。
表单令牌
表单令牌可以防止跨域请求。设置步骤如下:
- 在表单页面头部添加:
<meta name="csrf-token" content="{:token()}">
- 如果使用ajax方式提交,在JS代码中添加:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
- 在路由中添加验证:
Route::rule('admin/login2','admin/login_post','POST')->token();
表单令牌在提交失败后需要获取新的token值
JS完整代码:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
type: "post",
url: "login2.html",
data: postData,
dataType: "json",
success: function (response) {
if(response=='1'){
$("#login_submit").text('登录中…');
message('登录成功!',2);
setTimeout(function(){
window.location.href = 'home.html';
},1000)
}else{
message('账号或者密码错误!',1);
$.post(
'token.html', // 获取新的token
function(response) {
$('meta[name="csrf-token"]').attr('content',response);
}
);
return false;
}
}
});
TP8代码:
/*2.4 获得新的token */
public function get_token()
{
// 生成新的表单令牌
$a = token();
return $a;
}
路由安全代码:
Route::rule('admin/token','admin/get_token','POST');//获取新的token值