【问题标题】:Modify html before submitting form: prevent this hack在提交表单之前修改 html:防止这种 hack
【发布时间】:2011-05-21 07:05:12
【问题描述】:

我意识到恶意用户可以在提交表单之前在浏览器中修改表单的 html。 例如,切换两个相同类型的输入字段的名称。

我正在创建一个很大程度上依赖于数据库中每个条目之间关系的网站。

如果发生这种情况,可能会危及我网站的所有功能。 (我已经测试过了,它确实切换了用户在浏览器中切换名称的两个字段的输入,即我)

我们如何防止这种情况发生?

【问题讨论】:

    标签: php html forms security


    【解决方案1】:

    如果这种 hack 导致服务器端出现问题,您无法在浏览器代码中修复它。这意味着您需要在服务器上解决此问题。

    任何人都可以向您的服务器生成任何类型的 POST 或 GET,您需要为此做好准备。

    因此,请确保您在服务器上检测到这种篡改,并在那里通过返回错误消息或默默地忽略此类无效请求来处理它。

    如果服务器为此做好了准备,您可以让人们在他们的浏览器中随意入侵。

    【讨论】:

    • 在我的特殊情况下,我的数据库接受两个文本字段。两者具有相似的特征,因此无法根据类型进行验证。根据这两个字段,数据库中的条目与一个和另一个具有真实世界意义的关系。您能否更具体地说明如何“确保检测到这种篡改……”
    • @William Sham:只是一些健全性检查。是预期长度的值吗?如果你期待一个数字,这是一个数字吗?值是否在预期范围内?发布变量的组合是否有意义?是否允许当前用户检索请求的信息?这些健全性检查不能一概而论。每次处理已发布的变量时都需要考虑这一点。
    【解决方案2】:

    您应该验证您在PHP Manual for Validation 上看到的输入。例如,我们有表单输入 title 和 body 用于帖子。当用户提交帖子时,title 应该在 1 到 40 个字符之间,所以我们应该通过 PHP 进行验证。其次,body 不应包含恶意文本或代码,因此我们应该使用诸如addslahes() 之类的功能对其进行清理。

    整个主题都围绕着 PHP 安全。防止黑客攻击和恶意意图的唯一方法是学习安全性。通过上面的链接开始学习。

    【讨论】:

    • addslashes 对任何事情都没有多大帮助。
    • 只是一个例子。我无法在一个答案中涵盖整个 PHP 安全性。
    • 您不必这样做。我刚才说addslashes 是个坏例子,因为它只会给你一种虚假的安全感。
    • 我知道基于类型和一些防止恶意代码的技术进行验证。但是,如果用户从字面上切换相同验证类型的两个字段的名称并提交表单会怎样
    • @user76300 对于用户在客户端所做的事情,您无能为力。你不能告诉他们的浏览器它会破坏你的服务器端代码。如果用户故意切换两个字段的名称,他们通常是有恶意的;因此,您的选择是两个完全阻止提交表单或使用服务器端验证来防止严重损坏。
    【解决方案3】:

    据我所知,最简单且通常最好的解决方案是在将查询发送到数据库之前使用 php 检查每个输入字段是否具有有效值。例如,名称为“电话”的字段只能是数字,不能超过 10 个密码。让规则足够严格,你不应该有任何问题。此外,您还应该确保您的数据库字段是严格的,即。只允许你想要的长度和数据类型。

    【讨论】:

    • 在我的情况下不起作用,两个字段都是相似的类型。还是谢谢
    猜你喜欢
    • 2017-12-20
    • 1970-01-01
    • 2017-02-08
    • 2010-12-08
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    相关资源
    最近更新 更多