在我的网站上,我有一个结帐页面 - 一旦客户输入了他们的卡片详细信息 - 他们只需点击“立即付款”即可。它不是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
吗?
如果是这样的话?
答案 0 :(得分:2)
作为一般规则,客户端计算机上运行的任何内容都可能被客户端攻击 - 尤其是HTML。
您可以做的一件事就是在服务器上为该事务创建一个guid(或其他标识符),并有另一个输入:
<input type="hidden" id="transaction-id" value="127819A3-C0FB-404F-BFF8-D4FA2C4240EA"/>
然后保存服务器上的信息,因此如果他们修改了该值,那么他们极不可能将其转换为有效的交易,因此他们会被实际金额所困。
旁注:如果是XHTML,则需要在代码末尾添加斜杠:<tag />
答案 1 :(得分:1)
是的,有可能。一般情况下,当有人在修改结构后发送帖子或甚至不使用你的结构时,你需要随时准备好。
这就是验证应该有3个级别的原因:
因此,客户端验证会阻止您的服务器对用户发送的无效请求感到困扰。应用程序端可以防止您的服务器对明显的黑客攻击进行深入分析。深度分析是验证的最后一步。如果一个请求值得达到这个级别甚至通过它,那么请求是正确的。
答案 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表格。