我们已经使用PHP创建了一个数据库驱动的网站,其中包含设置cookie,现在需要防止HTTP欺骗,有关如何执行此操作的任何想法?我们是初学者,所以任何帮助都会很棒
答案 0 :(得分:6)
您不能“欺骗”HTTP请求。您向服务器发送请求,服务器响应相应。
我认为你想要阻止的是cookie欺骗。考虑到cookie存储在客户端,您无法阻止用户修改其内容。
请勿在Cookie中存储敏感信息。它们不安全,易于客户阅读和修改。
使用PHP会话。有关会话如何工作以及如何保证会议安全的完整说明,请参阅one of my previous answers。
基本上,保护会话是在两个方面完成的:
防止会话固定
每X个请求重新生成一个新的session_id
,以减少攻击者窃取id的时间。
唯一识别客户
使用IP和/或User-Agent唯一标识客户端,并检查每个页面上的值是否与存储在会话中的值相加。这实际上是您唯一确定客户端的两个选择。
即使有了这些,没有任何解决方案是万无一失的,一旦你的session_id
遭到入侵,你就可以完成任务。
同样,如需深入解释,请参阅my previous answer。
答案 1 :(得分:2)
欺骗什么? HTTP只是一种用于传输数据的协议,它本身并不会被欺骗。
要做的不是防止欺骗信息,而是简单地永远不要信任客户。就cookie而言,在接受cookie数据之前,存储一个与数据库进行比较的散列伪随机值。
<强>更新:强>
鉴于它是你特别关注的cookie,我会更深入一些。存储cookie时,有两件事需要关注。
因此,假设您想要一个包含用户存储个人数据的网站。在cookie中,您可以存储用户名或用户ID以及在用户登录时也存储在数据库中的散列安全令牌。安全令牌不可知,并且会随着每次登录而更改。任何个人信息都保留在数据库中,绝不会留在cookie中。
关于最佳做法的更多阅读: http://jaspan.com/improved_persistent_login_cookie_best_practice
答案 2 :(得分:2)
如果您想阻止man-in-the-middle窃听,您可能希望使用HTTPS,这会在网络上创建安全通道,前提是使用了足够的密码套件且服务器证书为{{ 3}}
注意:最初的问题含糊不清。现在很明显,问题是关于cookie欺骗。
答案 3 :(得分:0)
欺骗?身份受损的唯一真正问题是cookie被盗。
无论何时通过HTTP标头发送cookie,您都可以根据发布的IP地址进行检查。例如:
<?php
session_start();
$rec = db_query('select count(*), ip from session where session_id = "' . session_id() . '"');
list ($last_count, $last_ip) = $rec[0];
if (! $last_count) {
# add it into the database
db_query('insert into session (session_id, ip) values (' .
'"' . session_id() . '", ' .
'"' . $_SERVER['REMOTE_ADDR'] . '"' .
')');
} else {
if ($last_ip != $_SERVER['REMOTE_ADDR']) {
print "user has stolen a cookie!";
}
}
?>
但这会对ISP发出动态IP地址的人产生负面影响。
答案 4 :(得分:0)
我知道这已经得到了解答,但我想添加另一种我使用的技术,它对管理登录特别有用。像往常一样使用会话,但添加目录保护。
这样,如果会话被劫持,劫持者也必须能够获取目录登录。
我使用这种技术进行论坛管理。某些论坛很容易被黑客入侵,这减少了黑客入侵并造成严重问题的可能性。
DC