【问题标题】:Fail-safe way to validate forms in Javascript/Ajax rather than PHP?在 Javascript/Ajax 而不是 PHP 中验证表单的故障安全方法?
【发布时间】:2014-11-03 13:19:28
【问题描述】:

好的,所以目前我用 PHP 处理所有 HTML 表单提交。我将表单提交到一个 PHP 文件:

  • 检查页面加载时创建的 cookie 以防止 CSRF。
  • 包含处理验证的 require_once()。
  • 运行其他逻辑。

如果这些步骤中的任何一个失败,用户将在 PHP 中重定向到他们来自的页面,并显示错误消息。

我如何提交表单:

<form method="post" action="filename.php">

这个系统是故障安全的;好像有什么问题一样,即使禁用了 Javascript,用户也会返回到他们来自的页面。

所以我的问题是;我可以只使用 Ajax(表单提交时对服务器的 Ajax 请求)创建故障安全系统吗?所以我根本不需要这个 PHP 系统?有推荐的程序/教程吗?

到目前为止,我已经避免了这种情况,因为将 PHP 表单处理系统作为潜在黑客的故障保护系统以及 Ajax 的开销可能会花费每个表单几个小时。

澄清一下,我不需要支持禁用 Javascript 的用户。我只是想确保我的系统在这种情况下是否安全。我环顾四周,但事实证明很难找到澄清。

【问题讨论】:

  • 您无法依赖表单验证客户端,它很容易被规避,或者这不是您要问的?
  • 我很想看看你得到的任何答案,我也想知道一段时间。

标签: javascript php ajax forms post


【解决方案1】:

所以我找到了解决问题的方法。

使用这篇文章: http://blog.teamtreehouse.com/create-ajax-contact-form

我能够修改已经通过 Ajax 而不是直接调用的内容。所以它具有 Ajax 的所有优点,但如果禁用 Javascript,它只会退回到正常的 PHP 方法。

希望这对某人有用。 :-)

【讨论】:

  • 太好了,很高兴您找到了更适合您需求的教程。
【解决方案2】:

大多数情况下的简短回答是:不。

将任何客户端视为可靠或故障安全是不明智的,在验证用户输入时尤其如此。经验法则是:永远不要相信用户。

目前,根据描述,您的表单正在提交给验证表单数据的 PHP 脚本。这种方式将成为您最好的防线,因为您可以对正在使用的数据进行大量控制。

听起来您想取消表单提交,而不是强制加载另一个页面。您可以使用 AJAX 将表单信息传递给您的脚本进行验证,但您的 PHP 代码对于验证过程仍然是至关重要的

基本上你想让你的 PHP 验证可靠。接下来,开始添加一些将信息从表单传递到 PHP 代码的 AJAX 调用,但如果 AJAX 不可用,请准备好退回到标准表单提交。如果 AJAX 没有问题,您仍然可以提交数据,让 PHP 进行处理,然后返回指示成功或失败的有效负载。但请记住,在这种情况下,AJAX 只是用于验证的一些糖。您无需重新加载页面并再次传输整个文档,这只会让交易变得更甜蜜。

但请记住:它不可靠,也不是故障安全的。服务器端验证是隧道尽头的曙光。

【讨论】:

  • @user3420034 您可以检查随请求发送的令牌。关于这个主题的OWASP page 提到了一些预防措施。这是关于 CSRF/AJAX 的 SO questionanother one。这是brief article 谈论它。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 2014-02-03
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多