我们已经使用带有设置 cookie 的 PHP 创建了一个数据库驱动的网站,现在需要防止 HTTP 欺骗,关于如何做到这一点的任何想法?我们是初学者,所以任何帮助都会非常有用
5 回答
您不能“欺骗”HTTP 请求。您向服务器发送请求,服务器会做出适当的响应。
我认为您要防止的是 cookie 欺骗。考虑到 cookie 存储在客户端,您无法阻止用户修改其内容。
不要在您的 cookie 中存储敏感信息。它们不安全,容易被客户读取和修改。
请改用 PHP 会话。关于会话如何工作以及如何确保它们安全的完整说明可以在我之前的一个答案中阅读。
本质上,保护会话是在两个方面完成的:
防止会话固定
每 X 个请求 重新生成一个新session_id
的请求,以减少攻击者窃取 id 的时间。唯一标识客户端
使用 IP 和/或用户代理来唯一标识客户端,并检查每个页面加载时的值与会话中存储的值。这实际上是唯一标识客户的唯一两个选择。
即使有了这些,也没有任何解决方案是万无一失的,一旦您session_id
受到损害,您就已经完成了。
再次,深入的解释,请参阅我之前的回答。
欺骗什么?HTTP 只是一种用于传输数据的协议,它本身并不会被欺骗。
要做的不是防止信息欺骗,而是根本不信任客户。就 cookie 而言,在接受 cookie 数据之前,存储您与数据库进行比较的散列伪随机值。
更新:
鉴于您特别关心的是 cookie,我会更深入地介绍一下。存储 cookie 时,您需要关注两件主要的事情。
- 不存储实际数据
- 针对数据库进行验证
因此,假设您希望拥有一个包含您存储个人数据的用户的网站。在 cookie 中,您可以存储用户名或用户 ID 以及用户登录时也存储在数据库中的散列安全令牌。安全令牌不会是可知的,并且会随着每次登录而改变。任何个人信息都保存在数据库中,绝不会保存在 cookie 中。
更多关于最佳实践的阅读:http: //jaspan.com/improved_persistent_login_cookie_best_practice
我知道这已经得到解答,但我想添加另一种我使用的技术,它对管理登录特别有用。像往常一样使用会话,但添加目录保护。
这样,如果会话被劫持,劫持者也必须能够获得目录登录。
我将这种技术用于论坛管理。某些论坛很容易被黑客入侵,这减少了黑客进入并造成严重问题的机会。
直流
欺骗?身份泄露的唯一真正问题是 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 地址的人产生负面影响。