任何人都可以更改<input />金额值吗?

时间:2015-10-09 13:47:41

标签: html

在我的网站上,我有一个结帐页面 - 一旦客户输入了他们的卡片详细信息 - 他们只需点击“立即付款”即可。它不是Paypal按钮。

在我确认订单之前我不收费,只需点击一下即可接受订单。

我的问题是:他们可以简单地更改输入标签并将值设置为0以支付任何费用吗?

请看一下:

<input type="hidden" id="total-cost-val" value="3.85">
<input name="/atg/commerce/order/purchase/CommitOrderFormHandler.commitOrder" value="Pay now" class="place-order" type="submit">    
<input name="_D:/atg/commerce/order/purchase/CommitOrderFormHandler.commitOrder" value=" " type="hidden">
<input name="/atg/commerce/order/purchase/CommitOrderFormHandler.formName" value="paymentForm" type="hidden">
<input name="_D:/atg/commerce/order/purchase/CommitOrderFormHandler.formName" value=" " type="hidden">
<input name="/atg/commerce/order/purchase/CommitOrderFormHandler.commitOrderSuccessURL" value="" type="hidden">
<input name="_D:/atg/commerce/order/purchase/CommitOrderFormHandler.commitOrderSuccessURL" value=" " type="hidden">
<input name="/atg/commerce/order/purchase/CommitOrderFormHandler.commitOrderErrorURL" value="" type="hidden">
<input name="_D:/atg/commerce/order/purchase/CommitOrderFormHandler.commitOrderErrorURL" value=" " type="hidden">
<input id="jsEnableCheck" name="/atg/commerce/order/purchase/CommitOrderFormHandler.jsCheckForCheckout" value="true" type="hidden">
<input name="_D:/atg/commerce/order/purchase/CommitOrderFormHandler.jsCheckForCheckout" value=" " type="hidden">

这是我担心的第一行 - 我不是程序员,我没有做到这一点,我只是复制了Google Chrome的'Inspect Element'功能。

他们可以使用“编辑为HTML”将value = "3.85"更改为value = 0吗?

如果是这样的话?

5 个答案:

答案 0 :(得分:2)

作为一般规则,客户端计算机上运行的任何内容都可能被客户端攻击 - 尤其是HTML。

您可以做的一件事就是在服务器上为该事务创建一个guid(或其他标识符),并有另一个输入:

<input type="hidden" id="transaction-id" value="127819A3-C0FB-404F-BFF8-D4FA2C4240EA"/>

然后保存服务器上的信息,因此如果他们修改了该值,那么他们极不可能将其转换为有效的交易,因此他们会被实际金额所困。

旁注:如果是XHTML,则需要在代码末尾添加斜杠:<tag />

答案 1 :(得分:1)

是的,有可能。一般情况下,当有人在修改结构后发送帖子或甚至不使用你的结构时,你需要随时准备好。

这就是验证应该有3个级别的原因:

  • 客户端验证:这应该作为Javascript代码在浏览器中运行,并且应该通过确保仅将有效请求发送到服务器来防止无效表单提交浪费您的资源
  • 应用程序端验证:应该在服务器端运行,并且应该与客户端验证一样或多或少,因此可以防止黑客通过表单发送无效请求
  • 深度验证:当且仅当请求通过前两个级别并且此处应运行db时,才应达到此级别。检查

因此,客户端验证会阻止您的服务器对用户发送的无效请求感到困扰。应用程序端可以防止您的服务器对明显的黑客攻击进行深入分析。深度分析是验证的最后一步。如果一个请求值得达到这个级别甚至通过它,那么请求是正确的。

答案 2 :(得分:1)

可以在发送之前更改表单值,是的。

要防范它,只需在您执行之前检查服务上的交易 - 确认金额是否正确以及您收集的其他任何详细信息,并且只履行订单当您有明确,可信的确认信息表明付款是通过您正在使用的任何服务进行的。

如果金额与您对服务/产品的期望不符,或者付款未通过,只需向用户返回相应的错误以及下一步操作的说明等。

答案 3 :(得分:1)

  

他们可以简单地更改输入标记并将值设置为0来支付   什么?

是的,网站的访问者可以更改HTML或向表单处理程序发送POST / GET请求以及更改的信息。

通常,来自客户的信息应视为不受信任。应该始终是服务器端验证

由于您自己没有对其进行编程,因此您可能希望尝试欺骗信息并检查是否存在服务器端验证。如果没有,你应该雇用一名新的程序员。

答案 4 :(得分:0)

他们可以改变&#39;价值=&#34; 3.85&#34;&#39;使用&#39;编辑为HTML&#39;?

来使值= 0

是的,我可以(我通常使用firebug做类似的事情,通过更改密码&#39; - &gt;&#39; text&#39;)来改变输入类型。

如果是这样的话?

是的,它有效。因为当我提交表单时,它只检查当前输入的值。它将它视为从内存位置获取值。

所以, 永远不要相信我(客户端)。如果可能的话,我甚至可以通过Facebook提交Google表格。