■ Token使用
场景:在进行一些转账、订单操作、编辑删除文章、修改用户信息等重要操作的时候,需要确认当前操作请求是否由真实的用户主动发起的。
说明:在重要操作的表单中增加会话生成的Token字段,一次一用,提交后在服务端校验该字段。
PHP示例:页面包含生成token:
<?php
session_start();
function set_token() {
$_SESSION['token'] = md5(time()+rand(1, 1000));
}
?>
<form method="POST">
<input name="message" type="text">
<input type="hidden" name="token" value="<?=_SESSION['token']?>">
<input type="submit" />
</form>
■ 二次验证
场景:在进行一些转账、订单操作、编辑删除文章、修改用户信息等重要操作的时候,需要确认当前操作请求是否由真实的用户主动发起的。
说明:在关键表单提交时,要求用户进行二次身份验证,如密码、图片验证码、短信验证码等。
PHP示例:验证token的有效性:
<?php
session_start();
function check_token() {
if (isset($_POST['token']) && $_POST['token'] === $_SESSION['token']) {
return true;
} else {
return false;
}
}
if (isset($_SESSION['token']) && check_token()) {
echo "success";
} else {
echo "failed";
}
set_token();
?>
■ Referer验证
场景:同上
说明:检验用户请求中Referer字段是否存在跨域提交的情况。
PHP示例:检查请求连接的referer是否合法
<?php
session_start();
if (strpos($_SERVER['HTTP_REFERER'], 'www.xxx.com') !== false) {
exit("fail");
} else {
// process bussiness here.
}
?>