如何防止HTTP欺骗?

时间:2010-02-21 23:39:12

标签: php spoofing

我们已经使用PHP创建了一个数据库驱动的网站,其中包含设置cookie,现在需要防止HTTP欺骗,有关如何执行此操作的任何想法?我们是初学者,所以任何帮助都会很棒

5 个答案:

答案 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时,有两件事需要关注。

  1. 不存储实际数据
  2. 针对数据库进行验证
  3. 因此,假设您想要一个包含用户存储个人数据的网站。在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