使用JavaScript清理SQL的数据

时间:2010-12-20 22:34:09

标签: javascript sql escaping sql-injection sanitization

我有一堆具有各种输入元素的表单。我想在服务器端清理这些(,我正在使用服务器端JavaScript)将这些输入用作参数,并防止特殊字符格式错误。

在你走之前,比如“这不属于JavaScript领域”等等。

我正在使用数百万的许可软件解决方案,它有很好的JavaScript,但显然没有开箱即用的标准功能。所以,无论我使用什么,我都可以向你保证,你可能从未接触或听说过它。它支持服务器端javascript,因为语言很酷。

我的第一个目标是在数据进入数据库之前对数据进行清理,我只是喜欢用Ruby标记外国数据的方式:污染。而且我宁愿没有污染的数据。所以我可以谷歌和复制从这里和那里粘贴一些可怜的正则表达式,我有一些可悲的例子。但是,我希望有一个功能,可以说“好吧,从数据中取出70%的可能东西,并且非常好的消毒”。

基本上这些元素的字符串应该被转义,我认为我的这个愿望已经存在最佳实践。

function sanitize(myString) { ... ; return myString }

如何摆脱'#!?等符号?和其他特殊字符,我怎么能让他们反过来?我知道JavaScript转义方法,但我想知道在重新发明轮子之前是否已经调试了一个函数并公开了。

我考虑过: - JavaScript Escape - Base64编码 - 正则表达式

我只是想问以前写过这些功能的人。

谢谢,

1 个答案:

答案 0 :(得分:9)

请参阅下面的更新

你正在重新发明轮子。无论您使用什么来与数据库交谈,都应该有某种“准备好的声明”概念。在Java中,它实际上是PreparedStatement类,但基本上任何数据库访问系统都应该有类似的东西。您可以使用它们,这样就不会将SQL语句构建为字符串。例如,概念上:

preparedStatement = prepare("insert into mytable (id, name) values (?, ?)")
preparedStatement.setField(0, theId);
preparedStatement.setField(1, theName);

不是

statement = "insert into mytable (id, name) values ('" + theId + "', '" + theName + "')"

......这是要求注射攻击。

“预准备语句”概念将转义集中到数据库链接层,该层已准备好处理它。 如果你告诉别人你用什么来访问你的数据库,他们就能指出你的相关机制。见下文。

只是为了避免疑问:你正在服务器上执行此转义,对吗?我的意思是,这就是我读它的方式,你实际上已经说过“我想在服务器端清理这些......”。但是,如果你想在客户端做这件事:你不能。没有什么,绝对没有,客户端发送给你的东西都可以信任,因为它可以伪造。你必须在服务器端这样做。


更新:您已经评论过您在应用服务器中使用Rhino。优秀!然后只需PreparedStatement并让你的JDBC驱动程序为你处理它。 (对于非Java潜伏者:Rhino是Java VM的JavaScript。很棒。)