【发布时间】:2011-10-24 21:25:27
【问题描述】:
最近尽我所能保护我的网站免受 XSS 攻击,我现在正在保护我的网站免受 CSRF 攻击,观看并阅读了一些关于此事的文章,我创建了以下代码。
我想知道我的实现是否正确,在数据库中使用字符串来帮助安全。我应该做不同的事情吗?我应该检查两边的数据库吗???
代码:
if(!isset($_SESSION['register_token'])){
$keytype = 'register';
$getregisterkey = mysql_query("SELECT key FROM tokenkeys WHERE type='".$keytype."' ") or die(mysql_error());
while ($row = mysql_fetch_array($getregisterkey))
{
$registerkey = mysql_real_escape_string($row['key']);
};
$_SESSION['register_token']=sha1(uniqid(rand(), TRUE).$registerkey);
$_SESSION['register_token_time']=time();
}
<input type="hidden" name="token" value="<?php echo $_SESSION['register_token'];?>" />
if($_POST['register_token']==$_SESSION['register_token']){
$register_token_age=time()-$_SESSION['register_token_time'];
if($register_token_age=>300){
//process form
} else{
//valid token but expired
}
} else{
die('Access Forbidden')
}
【问题讨论】:
-
为什么要转义 sql 查询的输出?你知道 mysql_real_escape_string 甚至是做什么的吗?