当用户保存为当前表单页面时,如何验证进程页面?

时间:2012-04-01 16:22:46

标签: php

  1. 示例表单https://stackoverflow.com/questions/ask,我保存了这个 页面到桌面。
  2. 然后我将action="/questions/ask/submit"修改为完整网址并提交。
  3. 问题

    在流程表单上如何验证submit进程是否会返回错误页面,如果出现这样的情况则会被拒绝?

2 个答案:

答案 0 :(得分:2)

听起来你想要阻止cross-origin request forgery。 OWAST在这个问题上有一个cheat sheet。简短版本是:将随机生成的令牌存储在用户的会话(或cookie)和表单中。如果提交的令牌与存储的令牌不匹配,则拒绝提交。

这仅对诱骗访问者向您的网站提交数据的第三方有效。您无法阻止用户提交任意数据。你最接近的是确保用户有权做他们想做的事情(例如,如果他们提交了编辑id为23的请求,那么检查他们是否有权编辑id 23之前允许编辑完成。)

回复评论时更新:

  

是的,有时用户将编辑隐藏输入的值。让我们说在重定向到付款页面等之前的金额

用户无法选择应支付的金额,因此请勿将付款金额放入表单数据中。将所订购项目的ID和每个项目的数量放在一起,然后计算服务器上的成本。

答案 1 :(得分:2)

如果我正确理解了您的问题,您希望阻止某人从外部网站(而非您的服务器)提交表单。

解决方案非常简单,向访问表单页面的人添加会话变量,并在处理程序页面上检查它。如果某人没有正确的会话变量,那么该请求将被拒绝。

根据评论进行编辑。

产品的价格用户输入。它不是用户输入的东西,而是服务器确定的东西。您不应该有包含产品价格的隐藏输入。只有产品ID,并从数据库中获取价格。