【问题标题】:Hacking Checkbox Values破解复选框值
【发布时间】:2013-09-18 22:11:07
【问题描述】:

我正在编写一个网站应用程序,以允许用户使用复选框为他们的比萨饼选择配料。每个复选框都为其 value 属性分配了一个名称,例如:

<li name="meatItem" id="m1"><input type="checkbox" name="checkItem" id="Pep" value="1.5">Pepperoni</li>

我将编写一个循环遍历所有复选框的 php 脚本,并通过添加每个复选框中的所有值来确定比萨饼的价格。但我担心 HTML 被黑客攻击以更改值属性,这显然会导致我的 php 定价脚本不准确。这是一个有效的担忧吗?有没有办法避免这种情况?

【问题讨论】:

  • 那就不要在前端存储价格了。在后端意大利辣香肠 = x.
  • 是的,正如@relentless 所说,只需创建一个像$pep = 1.5 这样的变量,然后对于每个变量,将该值添加到当前总数中
  • 是的,将值设为“y”或“1”,表示“开启”,并更改name="checkItem" 以匹配您的id,即将其设置为Pep。然后,您可以在服务器端接收此值,并在那里将其转换为价格。
  • 附注这不是黑客攻击...
  • 如果您需要快速汇总等,您实际上可以将价格留在前端。 * 但是*,当他们下订单时,会重新计算服务器端的总数。您担心前端价格是对的,因此尽管您可以将它们用于显示目的,但不要依赖它们来计算最终结帐总额。

标签: javascript php html


【解决方案1】:

而不是将价格值直接放在复选框 HTML 中,您应该将复选框值改为“代码”,映射到他们想要的任何顶部。比如 1=cheese、2=peppers 等。然后在后端,有代码=>price 映射,并根据给出的代码计算价格 + PHP 中需要哪些配料。否则,正如您所说,有人很有可能破解这些值。

【讨论】:

  • 如果您使用代码,人们仍然可以将稍贵一些的代码(例如意大利辣香肠)的值更改为更便宜的代码(例如奶酪代码)。 (如果成分之间有任何价格差异。)
  • 这是真的,但是 php 脚本只会看到他们点了奶酪,结果他们吃错了披萨。或者也许他们将意大利辣香肠的代码更改为奶酪以及选择奶酪,然后他们有 2 个奶酪订单......基本上他们仍然可以更改值,但这对他们没有任何帮助。
  • 好吧,如果您使用代码来获取值,那么传递浇头的名称实际上是没有意义的,因为您可以根据传递的代码轻松找出它.我想您可以同时使用它们来输入某种“哈哈,您正在尝试破解!”如果您愿意,请留言。
  • 没错,ID 不一定是数字。只要价格仍然是后端计算的,它甚至可以是浇头的名称。尽管考虑到您没有在该代码中使用任何引号,但也许 chicken 只是一个变量,它 = 鸡肉顶部的 id? ;) (实际上,由于单个等号,if 语句甚至不是有效的比较)
  • 我认为这也可能是个问题,但 Bucky24 改变了我的想法。如果您甚至不考虑“名称”字段(除了获取代码值),那么您无需担心。只要代码与后端的成分匹配,那么它也将匹配所述成分的价格。这样您就不必担心“黑客”试图获得免费(或更便宜)的食物。
【解决方案2】:

简单地说,永远不要相信用户可以输入的任何内容。

是的,有人可以很容易地更改这些值,事实上,他们可以使用他们想要的任何值等将自己的表单提交到您的页面。

您最好获取提交的数据(即 POST/GET)并首先检查名称和数据是否应该是(即strlen(),A-z0-9 的正则表达式,可能是一个包含所有有效数据的数组等),然后一旦您满意所有提交的数据都是有效的,然后根据表单名称从数据库/其他来源获取您的价格。

只需将它们与表单一起发布,就会有人将价格更改为 0.00 并免费获得。因此,当您无论如何都必须从自己的来源(mysql等)检查价格时,在表格中发布价格是没有意义的。

【讨论】:

    猜你喜欢
    • 2015-08-16
    • 2020-12-21
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    相关资源
    最近更新 更多