使用JavaScript清理SQL的数据

Shy*_*yam 5 javascript sql sanitization sql-injection escaping

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

在你走之前,比如"这不属于JavaScript领域"等等.

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

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

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

function sanitize(myString) { ... ; return myString }
Run Code Online (Sandbox Code Playgroud)

我怎么能逃脱'#!?这样的符号 和其他特殊字符,我怎么能让他们反过来?我知道JavaScript转义方法,但我想知道在重新发明轮子之前是否已经调试了一个函数并且公共可用.

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

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

谢谢,

T.J*_*der 9

请参阅下面的更新

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

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

不是:

statement = "insert into mytable (id, name) values ('" + theId + "', '" + theName + "')"
Run Code Online (Sandbox Code Playgroud)

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

"预准备语句"概念将转义集中到数据库链接层,数据库链接层已做好充分准备来处理它.如果您告诉人们您使用什么来访问您的数据库,他们将能够指出您的相关机制.见下文.

只是为了避免疑惑:你正在服务器上进行此转义,对吧?我的意思是,这就是我读它的方式,你实际上已经说过"我想在服务器端对这些进行消毒......".但是,如果你想在客户端做这件事:你做不到.没有什么,绝对没有,客户端发送给你的东西都可以信任,因为它可以伪造.你必须做这个服务器端.


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