【问题标题】:Best Practices for Sanitizing SQL inputs Using JavaScript?使用 JavaScript 清理 SQL 输入的最佳实践?
【发布时间】:2011-02-14 03:30:54
【问题描述】:

因此,使用 HTML5 在客户端为我们提供了本地 SQL 数据库,如果您想编写 select 或 insert,您将不再能够通过说 $buddski = mysql_real_escape_string($tuddski) 来清理第三方输入,因为 PHP 解析器和 MySQL 桥接很远。这是一个全新的 SQLite 世界,您可以在其中编写查询并使用 JavaScript 解析结果。

但是,虽然您可能不会让整个站点的数据库崩溃,但由于恶意注入攻击而导致其数据库损坏或擦除的用户会相当沮丧。

那么,在纯 JavaScript 中,什么是最好的方法来转义/清理您的输入,以免它们对您用户的内置数据库造成严重破坏?

小脚本?规格?有人吗?

【问题讨论】:

    标签: javascript sql html database sanitize


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      使用 Google 的 JavaScript Html Sanitizer 作为 Caja 发行版的一部分,位于: http://code.google.com/p/google-caja/

      这个库可以在客户端和服务器端使用。我在运行 ASP JScript 主机下的库的经典 ASP 项目中使用它的服务器端。

      【讨论】:

        【解决方案3】:

        我认为,即使您对 javascript 上的输入进行清理,也会使您的系统容易受到攻击。如果您在您的 javascript 中放置一个输入消毒剂并将另一个输入消毒剂放置在您的 php 文件中,这也将是多余的。

        【讨论】:

          【解决方案4】:

          一旦您将计算完全委托给客户端,游戏就结束了。即使您的脚本是防弹的,用户仍然可以在本地加载他们自己的脚本(有关良性示例,请参阅 GreaseMonkey) - 并绕过您的脚本自行访问客户端数据库。

          在我看来,客户端数据库与不受信任的客户端(也就是说,几乎所有客户端)的唯一有用应用是镜像/缓存主服务器端数据库的部分 - 这样客户端就不会必须在重复请求时通过网络拉取数据(如果此类客户端数据库损坏,只需使其无效并再次从服务器加载数据)。

          【讨论】:

          • 虽然您的观点可能是正确的(在我的情况下也是如此),但它确实改变了必须对输入进行清理的事实“这样它们就不会对您用户的内置数据库造成严重破坏?”即使不尝试,用户也可以输入破坏代码的数据。服务器端编码器也可以做到这一点。克里斯的回答似乎涵盖了这一点并且有很好的参考。 RichB 也可能是上帝的答案,但不是我需要的。
          • @Grant M:这确实很重要——尽管准备好的语句是你最好的希望,但你不能保证访问你的客户端数据库的任何东西实际上都在使用你准备好的语句。跨度>
          【解决方案5】:

          我不确定 HTML5 和本地数据库,但在服务器端最好使用 准备好的语句 而不是转义。我相信客户端的数据库也是如此。

          【讨论】:

            猜你喜欢
            • 2013-01-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-19
            相关资源
            最近更新 更多