有个黑客联系我,说我的网站会被会话劫持,他说我的文本框很容易被会话劫持。
有没有办法保护文本框不受会话劫持的影响?我正在用它来转义并防止sql注入。
这是我的表格
<form name="hide" action="hideboxupdate.php" method="post">
<input type="radio" name="yes" value="1" />
Yes<br />
<input type="radio" name="no" value="0" />
No
<input name="submit" type="submit" value="Submit" />
</form>这是我的hideboxupdate.php
<?php
$yes= mysql_real_escape_string($_POST['yes']);
$yes2 = strip_tags($yes);
$no= mysql_real_escape_string($_POST['no']);
$no2 = strip_tags($no);
?>
<?php
if (isset($yes2)) {
$result3333 = mysql_query("UPDATE users SET hide_box='1' WHERE username = '".$_SESSION['username']."'")
or die(mysql_error());
echo "Users now can not see your user box";
}
if (isset($no2)) {
$result3333 = mysql_query("UPDATE users SET hide_box='0' WHERE username = '".$_SESSION['username']."'")
or die(mysql_error());
echo "Users can now see your box on your profile";
}
?>有什么方法可以防止会话劫持吗?
发布于 2012-04-03 21:19:11
创建会话、浏览器数据和ip的md5,并将其放入数据库,在每次页面加载时检查是否仍然相同,如果不是,则销毁会话。
发布于 2012-04-03 21:24:42
当您将页面与表单一起发送时,请包含一个带有随机字符串的隐藏输入,您还可以将该字符串写入数据库中的用户记录,如下所示:
<input type="hidden" name="csrf" value="0432985732409857243"/>当用户提交表单时,您将验证表单的隐藏数据csrf是否与存储在数据库中的值相匹配。如果csrf匹配,这意味着更新是好的,您也删除了csrf;如果csrf不匹配,则不进行更新。
这保护了用户,因为只有他才能提交该表单,而且只能提交一次。
发布于 2012-04-03 21:26:53
这并不能防止您的代码受到攻击。人们只需在他们的本地主机上创建一个表单,并使用与您使用的相同变量名发布到您的服务器上,就可以将任意数据发布到您的表单。
这只是一个例子。使用白名单方法。在服务器端,创建一个数组,其中包含表单中预期为正确输入的每个变量的所有可能值(对于<input>,<textarea>,显然是不可能的)。
此外,由于用户在登录后的每个logout....use session_regenarate_id之后都在谈论会话fixation...destroy会话(使用md5 + salt加密)。不要在url中传播session_id。
几点建议:(由Chris Shiflett撰写……一位著名的网络安全专家)
http://shiflett.org/articles/session-hijacking
http://shiflett.org/articles/session-fixation
http://shiflett.org/articles/foiling-cross-site-attacks
http://shiflett.org/articles/the-truth-about-sessions
http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string
希望这能帮上忙。
https://stackoverflow.com/questions/9994008
复制相似问题