【问题标题】:Does ajax increase or decrease security?ajax 是提高还是降低安全性?
【发布时间】:2015-08-21 08:52:52
【问题描述】:

我正在创建一个到目前为止是纯 PHP 的网站。我在想,由于很少有人没有启用 JavaScript(我想知道为什么!),也许我应该将我的网站创建为一个完全 PHP 的网站,而不需要任何 AJAX。我想错了吗?

只是为了确定,如果我实施一些 AJAX 会增加我的网站被入侵的风险吗?

我是否应该为此担心并开始使用 AJAX?

【问题讨论】:

  • 使用 ajax 不会降低您的站点安全性,除非您做错了,就像您可以在非 ajax 请求中提出安全问题一样。除非您确定您的大量网站访问者不会启用 js,否则我不会将无 js 客户端考虑在内。
  • 在这个时代,如果您禁用了 javascript,大多数网站都无法运行。我没有统计数据,但作为软件开发人员,我什至不再考虑这一点(除非您有强制遵守的法规或标准)。
  • 虽然这可能是真的,但渐进增强仍然比完全忽略非 JS 用户要好得多。很少有理由实现完全依赖于 JS imo 的功能。大多数事情都可以在没有的情况下完成(通常代码更优雅)。不要疯狂地更改每个链接和表单,这样它们在纯 HTML 中就没有任何意义。使用 PE 进行构建可确保它在任何地方都能正常工作,而出色的 SEO 只是一个额外的好处。 bradfrost.com/blog/post/on-progressive-enhancement

标签: javascript php ajax security


【解决方案1】:

Ajax 并非天生安全或不安全。

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

  • 加载页面时,用户在代码隐藏中进行身份验证

  • 用户 ID 或其他凭据被 JavaScript 呈现并获取

  • 这些(完全未经身份验证的)凭据由 Ajax 通过网络发回,而不是检查服务器端。即使使用像 Fiddler 这样的简单工具也很容易被黑!

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

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

  • SQL injection措施

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

Ajax makes websites more responsive 在现代网络中无处不在。如果您预计大量访问者会关闭 JavaScript,或者如果任何丢失的访问者对您来说是不可接受的,那么请注意安全性,并为未启用 JS 的访问者优雅降级,并且您应该没什么好怕的。

【讨论】:

    【解决方案2】:

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

    我会说大多数人确实启用了 JavaScript。 Probably 2% at most have it disabled according to this post from 2012.

    可以肯定的是,如果我实施一些 AJAX 会增加风险 我的网站遭到入侵?

    是的,从技术上讲确实如此。更多的代码 = 更多的错误机会,而安全错误将是其中的一个子集。

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

    还有更多机会出现客户端错误,例如 XSS(尤其是DOM based XSS 错误潜入其中的机会更大)。

    我是否应该为此担心并开始使用 AJAX?

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

    与任何基于 Web 的内容一样,请特别注意 OWASP Top 10 并遵循安全编码实践以最大程度地降低风险。始终建议由外部公司进行安全评估以获取您遗漏的任何内容,尽管这可能会很昂贵。

    【讨论】:

      【解决方案3】:

      AJAX 本身不会提高或降低您网站的安全性,至少在其实施非常精细的情况下是这样。客户端(浏览器)将打开或关闭 JavaScript。如果打开它,客户端端可能会有更多的不安全感,这不会影响您的服务器,因此不会影响您的网站。

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

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

      我建议使用支持 AJAX 的框架(取决于您使用的背景技术,如 PHP、Java、Perl),这将使您的整个事情变得更容易。此外,您也许应该搜索“保护 AJAX 应用程序”之类的内容,以获取有关该主题的更多详细信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-27
        • 1970-01-01
        • 2010-11-15
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多