【问题标题】:website hacking prevention/minimization网站黑客预防/最小化
【发布时间】:2011-02-17 16:55:32
【问题描述】:

告诉我的服务器端脚本提交的表单或数据来自受信任的来源或来自我的网站的最佳方式是什么? 我已经在执行大量服务器端数据审查,并且认为我也可以通过客户端进一步改进这一点

我是 php/mysql 开发人员

【问题讨论】:

  • PHP form tokens 的可能重复项
  • 伙计们,我的问题是“检查服务器收到的天气数据是否来自有效来源”而不是“检查数据是否正确”

标签: php security


【解决方案1】:

要找出发布数据使用的用户的 IP:

$ip = $_SERVER['REMOTE_ADDR'];
echo "<b>IP Address= $ip</b>"; 

根据IP,你可以决定用户是否可信。 (例如,如果您只想信任特定范围的 IP 地址)

每当我在 PHP 中读取发布的变量时,我都会像这样过滤它们:

function check_string($string) {      
    // allowed chars: a-z,A-Z,0-9,-,_      
    if((preg_match('/^[a-zA-Z0-9\-\_]+$/',$string))) 
    return true;   
    return false;   
}

它将过滤所有不是 a-z、A-Z、0-9 或 _ 的字符,并稍微增强网站的安全性。如果您可以访问您的网络服务器:

  • 如果您有权访问网络服务器配置,请禁用服务器横幅(例如显示操作系统和 apache 版本)。此信息对黑客非常有用,您希望禁用所有可能以任何方式帮助他们的东西;)

  • 阻止目录列表(例如 .htaccess 文件)。一个简单的例子是:

    选项所有-索引

  • 使用有限的用户帐户运行网络服务器(最好同时 chroot 用户)

【讨论】:

    【解决方案2】:

    在 mysql 查询中使用 mysql_real_escape_string 并在 html 帖子中使用 htmlentities。

    例子:

    错误:

    <?php
    if($_SERVER['REQUEST_METHOD'] == "post"){
        echo $_POST['hai'];
    }
    ?>
    

    右:

    <?php
    if($_SERVER['REQUEST_METHOD'] == "post"){
        echo htmlentities($_POST['hai']);
    }
    ?>
    

    $_POST 也可以是 $_GET


    错误:

    <?php
    $query = "SELECT * FROM table WHERE msg = '". $_GET['hai'] ."'";
    ?>
    

    右:

    <?php
    $query = "SELECT * FROM table WHERE msg = '". mysql_real_escape_string($_GET['hai']) ."'";
    ?>
    

    当你从 mysql 表中取出东西时不要忘记使用 htmlentities...

    问候

    【讨论】:

    • 这似乎没有解决“提交的表格或数据是来自受信任的来源还是来自我的网站”的问题。不过,专业提示。
    【解决方案3】:

    我一直使用一个处理此类问题的类,它将同时处理服务器/客户端并确保任何输入都是从服务器本身进行的。然后它会验证并确保它没有被赋予特殊字符。

    http://validformbuilder.org/

    让我知道这是否有帮助,它在不久前帮助了我。 :)

    【讨论】:

      【解决方案4】:

      我认为最好的选择是在请求中添加数字签名,即使是简单的。

      例如,您的站点或受信任的来源在添加秘密“salt”(未发送)之后添加计算请求的 SHA 校验和。服务器获取数据,添加相同的盐并计算 SHA 签名,如果 SHA 匹配,则源知道秘密,您可以信任内容。

      【讨论】:

        【解决方案5】:

        我猜你的问题暗示了 CSRF... 只需生成并添加一个验证令牌。

        许多框架都可以为您管理这些。

        【讨论】:

          【解决方案6】:

          伙计们,感谢您的帮助,我很感激。一般来说,我谈论的是客户端安全性,即确保来自客户端的数据来自原始来源。

          通常 SSL 可能只是答案,经过大量浏览后,我发现两个网站在一定程度上解决了这个问题:aSSL 和 Jquery implementation

          通过这种方式,我的数据被保护到了 90% 的水平

          你怎么看?

          【讨论】:

            猜你喜欢
            • 2013-08-04
            • 1970-01-01
            • 1970-01-01
            • 2012-01-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-28
            相关资源
            最近更新 更多