2

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

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

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

小脚本?规格?任何人?

4

5 回答 5

6

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

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

于 2010-04-30T08:48:53.547 回答
2

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

于 2010-04-30T08:11:44.727 回答
1

使用准备好的语句。

http://dev.w3.org/html5/webdatabase/#sql-injection

于 2010-05-02T01:10:28.990 回答
0

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

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

于 2010-04-30T10:31:48.017 回答
0

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

于 2010-04-30T08:56:57.303 回答