【问题标题】:How do you protect the html value你如何保护 html 值
【发布时间】:2015-05-26 06:02:41
【问题描述】:

我正在从数据库中打印一个 ID,以便创建一个带有该 ID 的 SQL 语句 INNER JOIN。所以,问题在于“用户”可以从调试工具中更改它并轻松“破解”该站点。

检查一下:

<select name="brand">
    <?php 
    # Print brands names
    for ($i=0; $i < count($brandsql); $i++) { 
        print '<option value="' . $brandsql[$i]['brand_id'] . '">' . $brandsql[$i]['brand_name'] . '</option>';
    }
    ?>
</select>

所以...我的问题是:有没有办法在不将 ID 打印到 HTML 的情况下做到这一点?请注意,我使用 JavaScript 获取 ID 值:

$('#brand').change(function(e){
    $.getJSON("q.php", {type: 1, brand: this.value})
    .done(function(e){
        // I print the results to the user.
    });
});

有更好的方法吗?

【问题讨论】:

  • 知道ID不会让用户破解网站。糟糕的服务器安全性会让用户破解网站。
  • 用户总是可以“破解”网站,这只是时间问题。您永远不应期望用户提供有效数据。我认为您在 HTML 中显示 ID 没有问题(您使用 jQuery 进行操作,并且可以从浏览器访问)。
  • 您可以使用 php 会话。会话变量留在服务器端,不容易被弄乱。将 id 存储在会话变量中,稍后再使用。 sessions
  • 你不能。您根本无法信任来自客户端站点的任何内容。验证所有内容!

标签: javascript php html json


【解决方案1】:

简单的回答:你不能。

您所描述的称为SQL Injection,这是一种通过注入开发人员从未打算使用的 SQL 来“破解”网站的方法。这可能会导致可怕的情况,例如删除您的数据库或访问管理员帐户。

为防止这种情况,您唯一的可能是使用 PHP 清理输入,例如使用 filter_var():

$input = filter_var($_POST['brand']);

即使您的情况并没有那么糟糕,我还是建议您实施安全措施。永远不要相信用户输入。这是邪恶的。

【讨论】:

    【解决方案2】:

    遇到同样的问题。然而,简单的解决方案。当您提供应该包含来自 DB 的 ID 的用户表单时,将该 ID 放在 $_SESSION[edit_id] 中。他不能摆弄那个。在你处理给定的表单之后,你只需执行 unset($_SESSION[edit_id])。这种方式不需要形式上的价值,它只是为您的代码增加了更多的管理,但完全值得消除这种安全风险。

    【讨论】:

      【解决方案3】:

      当您描述您的问题或“破解站点”的意思时,我无法真正理解您在说什么,但基本上您必须验证用户在服务器上的输入,并始终假设他们可以为您的服务器提供任何价值。

      因此,如果您的问题是您只希望用户打印具有特定“id”的记录,那么您必须识别用户(通常使用用户名/密码,但对于简单的表单,您可以只使用密码或 pin number 等)并存储允许用户在您的服务器上打印的 ID。然后检查该用户是否允许提交的 id。

      【讨论】:

        【解决方案4】:

        在表单中打印 ID 始终存在风险。防止用户摆弄的唯一方法是在服务器端添加某种验证。

        如果您有某种方式将这些数据存储在服务器端,则需要这样做。也许将其链接到会话 ID 或类似的东西。

        如其他答案中所述,请确保您是否有直接进入 SQL 的字段以防止 SQL 注入。

        【讨论】:

          【解决方案5】:

          您发送给用户的内容完全掌握在他手中,您无法阻止他更改值,即使您无法阻止使用 javascript 的浏览器中的键 f12、ctrl+u 等按钮,这是不允许的浏览器。

          【讨论】:

            猜你喜欢
            • 2015-12-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-12-31
            • 1970-01-01
            • 2016-05-11
            • 2020-01-29
            • 2014-02-17
            相关资源
            最近更新 更多