Javascript ajax增加还是减少了安全性?

Javascript ajax增加还是减少了安全性?,javascript,php,ajax,security,Javascript,Php,Ajax,Security,我正在创建一个网站,直到现在是纯PHP。我在想,既然很少有人没有启用JavaScript(我想知道为什么!),也许我应该创建一个完全没有AJAX的PHP网站。我想错了吗 可以肯定的是,如果我实现一些AJAX,会不会增加我的网站被破坏的风险 我是否应该担心这一点并开始使用AJAX?AJAX本身不会增加或降低站点的安全性,至少如果它的实现是精心设计的。客户端(浏览器)将打开或关闭JavaScript。如果打开它,客户端可能会有更多的不安全性,这不会影响服务器,因此也不会影响站点 尽管如此,您当然应该

我正在创建一个网站,直到现在是纯PHP。我在想,既然很少有人没有启用JavaScript(我想知道为什么!),也许我应该创建一个完全没有AJAX的PHP网站。我想错了吗

可以肯定的是,如果我实现一些AJAX,会不会增加我的网站被破坏的风险


我是否应该担心这一点并开始使用AJAX?

AJAX本身不会增加或降低站点的安全性,至少如果它的实现是精心设计的。客户端(浏览器)将打开或关闭JavaScript。如果打开它,客户端可能会有更多的不安全性,这不会影响服务器,因此也不会影响站点

尽管如此,您当然应该安全地实现AJAX入口点(这是由AJAX请求访问的服务器端文件)。您应该记住两条最重要的经验法则:

  • 将每个用户输入(无论是否通过AJAX输入)视为潜在的“邪恶”,因此彻底验证它并使用数据库转义。。。不要只依赖客户端验证
  • 一个好的网站应该提供所有可能的访问与javascript启用也没有它。当然,这并不总是可能的,但至少应该尝试一下

我建议使用一个支持AJAX的框架(取决于您使用的是什么背景技术,如PHP、Java、Perl),这将使整个过程更加容易。此外,您可能还应该搜索“保护AJAX应用程序”之类的内容,以获取有关该主题的更详细信息。

AJAX本身并不安全

然而,它确实为不安全的代码打开了“机会”。我经常看到的一个错误如下:

  • 加载页面时,用户将通过代码隐藏进行身份验证

  • 用户id或其他凭证由JavaScript呈现并提取

  • 这些(完全未经验证的)凭证由Ajax通过网络发回,而不是在服务器端进行检查。非常容易被黑客攻击,即使是一个简单的工具,如

您必须对web方法/web API应用与站点中其他地方相同的安全级别。如果您这样做了,Ajax应该不会比“常规”web页面更安全或更不安全。需要注意的事项包括:

  • 在web服务或API中进行适当的身份验证和授权检查

  • 反措施

  • 如果传输个人或敏感数据

Ajax和web技术在现代web中非常普及。请注意安全性,如果您希望大量的访问者关闭JavaScript,或者您不接受任何丢失的访问者,并且您不应该担心,那么对于未启用JS的访问者,请优雅地降级

我正在创建一个网站,直到现在是纯PHP。我在想 因为很少有人没有启用JavaScript(我 不知道为什么!)也许我应该创建一个完全PHP的网站 没有任何AJAX。我想错了吗

我想说大多数人都启用了JavaScript

可以肯定的是,如果我实现一些AJAX,它会增加风险吗 我的网站被破坏了

是的,从技术上讲是这样的。代码越多=出现错误的可能性越大,而安全性错误将是其中的一个子集

您还将增加应用程序的攻击面,因为您通常将为异步执行的用户操作实现更多的服务器端处理程序

还有更多的客户端bug流行的机会,比如XSS(特别是有更多的bug潜入其中)

我是否应该担心这一点并开始使用AJAX

你应该“理所当然地关心”而不是担心。大多数站点都认为增加的风险是可以接受的,即使是银行应用程序等高安全系统。如果实现正确,您的站点可能会像没有AJAX时一样“安全”


与任何基于web的产品一样,请特别注意安全性,并遵循安全编码实践,以将风险降至最低。最好由外部公司进行安全评估,以找出您遗漏的任何内容,尽管这可能会很昂贵。

使用ajax不会降低您的网站安全性,除非您做得不对,就像您可以在非ajax请求中提出安全问题一样。除非你确信大量的网站访问者不会启用js,否则我不会考虑没有js客户端。在这个时代,如果你禁用了javascript,大多数网站都不会工作。我没有统计数据,但我再也不把它当作软件开发人员来考虑了(除非你有强制遵守的规定或标准)。虽然这可能是正确的,但渐进式的改进仍然比忽略非JS用户要好得多。很少有理由实现完全依赖JS imo的特性。大多数事情都可以在没有JS imo的情况下完成(通常代码更优雅)。不要发疯,改变每一个链接和表单,让它们在纯HTML中毫无意义。使用PE构建确保它在任何地方都能工作,而优秀的SEO只是一种奖励。