我正在尝试更多地了解PHP 会话修复和劫持以及如何防止这些问题.我一直在阅读Chris Shiflett网站上的以下两篇文章:
但是,我不确定我是否理解正确的事情.
为了帮助防止会话固定,调用session_regenerate_id(true)就足够了; 成功登录某人后?我想我理解正确.
他还讨论了通过$ _GET使用在URL中传递的令牌来防止会话劫持.怎么会完全这样做?我猜测当有人登录时你生成他们的令牌并将其存储在会话变量中,然后在每个页面上你将该会话变量与$ _GET变量的值进行比较?
这个令牌只需要在每个会话或每个页面加载时更改一次吗?
他们是一个防止劫持而不必在网址中传递值的好方法吗?这会更容易.
具体而言,这与使用客户端会话cookie来识别服务器上的会话有关.
对整个网站使用SSL/HTTPS加密是最好的答案,并且您可以最好地保证中间人攻击中没有人能够嗅探现有的客户端会话cookie吗?
也许第二最好对存储在会话cookie中的会话值本身使用某种加密?
如果恶意用户具有对计算机的物理访问权限,他们仍然可以查看文件系统以检索有效的会话cookie并使用它来劫持会话?
我知道这个话题已经讨论了很多,但我还有一些具体的问题仍未得到解答.例如:
// **PREVENTING SESSION HIJACKING**
// Prevents javascript XSS attacks aimed to steal the session ID
ini_set('session.cookie_httponly', 1);
// Adds entropy into the randomization of the session ID, as PHP's random number
// generator has some known flaws
ini_set('session.entropy_file', '/dev/urandom');
// Uses a strong hash
ini_set('session.hash_function', 'whirlpool');
Run Code Online (Sandbox Code Playgroud)
// **PREVENTING SESSION FIXATION**
// Session ID cannot be passed through URLs
ini_set('session.use_only_cookies', 1);
// Uses a secure connection (HTTPS) if possible
ini_set('session.cookie_secure', 1);
Run Code Online (Sandbox Code Playgroud)
session_start();
// If the user is already …Run Code Online (Sandbox Code Playgroud) 一位黑客已经联系过我,说我会用会话劫持我的网站,他说我的文本框是会议劫持易受攻击的.
无论如何,保护文本框免受会话劫持我使用它来逃避和保护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>
Run Code Online (Sandbox Code Playgroud)
那么这是我的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()); …Run Code Online (Sandbox Code Playgroud)