确保你的表单是从你的页面提交的!也可以通过在查询字符串中添加 &token 并使用 $_GET 检查此值与会话数据(或你喜欢的任何数组)进行比较来适应 URL,注意这个字符串是随机生成的并存储的。如果你不想使用 $_SESSION,可以创建自己的数组来存储生成的字符串,例如 $tokens = array(),并在你的 easysecure 类中存储该数组中的所有内容!
<?php
class easysecure {
var $curr_user;
var $curr_permission;
var $curr_task;
var $validpermission;
var $error;
function &setVar( $name, $value=null ) {
if (!is_null( $value )) {
$this->$name = $value;
}
return $this->$name;
}
function maketoken($formname, $id){
$token = md5(uniqid(rand(), true));
$_SESSION[$formname.$id] = $token;
return $token;
}
function checktoken($token, $formname, $id){
if(!$token){
$this->setVar('validpermission', 0);
$this->setVar('error', '未找到 token,检测到安全漏洞');
return false;
}
$key = $_SESSION[$formname.$id];
if($key !== $token ){
$this->setVar('validpermission', 0);
$this->setVar('error', '无效 token');
return false;
}
if($this->validpermission !==1){
echo '没有有效的权限来运行此脚本';
return false;
}else{
return true;
}
}
}
?>
<?php $userid = *** ?>
<form name="newform" action="index.php" method="post">
<input type="text" name="potentialeveilfield" value="" size 30 />
<input type="hidden" name="token" value="<?php echo maketoken(newform, $userid); ?>" />
<input type="submit" />
</form>
现在,在处理表单时... 检查 token 的值
<?php
if(!checktoken($_POST['token'], 'newform', $userid))
{ exit();