Php AJAX的安全风险来自验证?

Php AJAX的安全风险来自验证?,php,html,ajax,validation,Php,Html,Ajax,Validation,我想验证表单,而不必重新加载整个页面。我目前正在使用JavaScript,但是这是非常不安全的。为了解决这个问题,我想使用AJAX和PHP脚本来验证表单。有人知道这可能会带来任何安全风险吗 我还假设AJAX方法比vanilla JS安全得多,但我可能错了?它们与使用纯客户端JavaScript进行验证的风险完全相同。唯一的区别是,作为过程的一部分,您向服务器请求一些数据 无论验证结果如何,用户都可以重写JavaScript以提交表单 在检查提交数据时使用JavaScript的唯一原因是为了节省用

我想验证表单,而不必重新加载整个页面。我目前正在使用JavaScript,但是这是非常不安全的。为了解决这个问题,我想使用AJAX和PHP脚本来验证表单。有人知道这可能会带来任何安全风险吗


我还假设AJAX方法比vanilla JS安全得多,但我可能错了?

它们与使用纯客户端JavaScript进行验证的风险完全相同。唯一的区别是,作为过程的一部分,您向服务器请求一些数据

无论验证结果如何,用户都可以重写JavaScript以提交表单

在检查提交数据时使用JavaScript的唯一原因是为了节省用户时间。如果您想做一些事情,比如在用户填写表单的其余部分时询问服务器是否使用了用户名,那么很好——这是Ajax的一个很好的用法。否则,使用Ajax是毫无价值的

如果您想进行客户端检查,那么将所有可以用于检查的逻辑放在客户端上,并避免发出HTTP请求。如果你有只能检查服务器端的东西(因为它们是基于数据的,比如已经使用过的用户名的例子),那么就考虑使用Ajax。客户端检查是方便性检查始终在服务器端和最终提交的数据上进行安全检查。


请注意,验证使用Ajax实际提交的数据是另一回事,因为这是最终提交的数据。它是在最终提交之前进行Ajax验证,不会增加对数据的信任。

您可以在Ajax中验证数据,也可以在纯JavaScript中验证数据,但在收到数据后,您必须在脚本中重新验证数据。
每个客户端验证方法都可以通过向表单目标发送POST请求来避免。

AJAX所做的只是将流程的一部分卸载到服务器,“隐藏”到客户端(从某种意义上说,数据/变量的功能处理是隐藏的)。也就是说,您应该警惕发送到服务器的信息,这些信息可能会被捕获,甚至被欺骗。与纯JS的区别在于,您的功能处理是有目共睹的,并且可能会被利用

除非您正在验证数据库内容(即用户名的唯一性等),否则不需要在服务器端进行验证。如果您只是验证某个东西是否是电子邮件,您可以在JS中执行此操作,例如使用正则表达式


如果要验证DB数据,请确保使用
mysql\u real\u escape\u string
转义源于sent(POST/GET)变量的所有DB查询变量,以防止SQL注入这里要记住的主要一点是,在使用AJAX时,基本上是为数据库提供一个接口。例如,如果您正在检查重复的用户名(这在javascript中是无法做到的)或重复的电子邮件,以便提供诸如“此用户名已在使用…请尝试另一个”之类的消息,则您为潜在黑客提供了一个界面,以便立即检查哪些用户名和/或电子邮件可用。安全注意事项与javascript不同。 关于这个主题,我给你们的建议是(1)使用参数化查询访问数据库,正如有人已经建议的那样。(2) 在ajax.php页面上实现延迟-长度取决于场景-我会花大约1秒(3)在模糊上执行ajax,或在失去焦点时执行ajax,而不是在每个按键上执行,(4)在ajax处理程序中实现检查,以确保请求来自预期页面(即:不是黑客编写的随机脚本)。(5) 仅在表单元素的其他一些基本验证发生时进行AJAX调用[即:基本javascript验证]

我希望这有帮助。使用ajax进行表单验证与javascript验证完全不同。它是数据库的一个接口,您需要小心使用它

这有助于想象你将如何侵入自己的网站——知道哪些电子邮件地址在你的网站上注册是一个很好的开始。因此,我可以编写一个脚本,使用常用词和/或名称生成随机电子邮件地址,并使用ajax处理程序获取站点的注册电子邮件地址列表。如果你不遵循我上面提到的建议(1)-(5),我可以很快做到这一点。 一旦我收到电子邮件,我就用谷歌搜索它们。。。很可能这给了我一个名字。我可以从那里猜出用户名。现在我有了用户名和电子邮件。密码需要很长时间才能解释,但是如果我能很容易地得到用户名或电子邮件。。。它将你标记为目标,你将得到更多你真正想要的关注

我现在正在开发一个注册验证系统,如果你愿意,我很乐意与你分享。也许我错过了一些重要的事情


平静下来。

据我所知,AJAX正在使用XMLHttpRequest,它本身就是一个javascript对象,所以如果将AJAX和javascript分开,听起来很奇怪。但不管怎样,AJAX就像POST/GET一样,不需要刷新,所以只要您正确地执行服务器端验证,就可以了。不,如果不安全地编写代码,没有什么是安全的。谢谢:-)这也是我使用PHP/AJAX的原因-它(合理地)是实时的,但具有PHP的相对安全性。谢谢。我要说的是,它比客户端JS稍微安全一些——恶意用户不能像在他们的机器上修改JS代码那样轻松地修改PHP代码,而且只要我在PHP脚本中使用适当的安全措施,他们就不能用错误的POST数据破坏它。用户不需要修改PHP代码。他们只需要修改处理响应的JavaScript。PHP说“这是不可接受的数据!”,用户让JavaScript说“那又怎样?!”。在这方面,美国