<分区>
我每天从 erlang 应用程序中间件使用 Oracle 和 MySQL 数据库。在这些中间件应用程序中,我正在运行 Nitrogen Web Framework
和 Yaws Web Server
以及一些 erlang 应用程序,如 RabbitMQ
。尽管应用程序容易受到 SQL injection
的攻击,但它们在受信任的内部网中运行。
此处记录的攻击如: http://sqlzoo.net/hack/ 非常能够使这些应用程序变得无用。是否有图书馆(Erlang)或我如何防止这些攻击的技术?我知道在 PHP
等其他语言中,通过转义任何可能由用户或攻击者插入的 stringified
来确保所有参数都是 single-quotes
。
说到字符串参数中的 escaping all single-quotes
,我想出了一个 replace_all
函数,但它似乎无法解决我的需求,因为我想我会找到一种方法将所有 single-quotes (')
替换为 escaped version of themselves (\')
。
replace(Char,With,String)-> replace(Char,With,String,[]).在几个例子上测试它:
replace(_,_,[],Done)-> lists:reverse(Done); replace(Char,With,[Char|Rest],Buffer)-> replace(Char,With,Rest,[With|Buffer]); replace(Char,With,[Any|Rest],Buffer)-> replace(Char,With,Rest,[Any|Buffer]).
3> sql_protect:replace($m,$k,"muzaaya"). "kuzaaya" 4> sql_protect:replace($a,$u,"muzaaya"). "muzuuyu" 5>但是我如何使用这个函数来转义所有单引号。说
String = "' OR 1=1'"
,更改为:String = "\' OR 1=1\'"
。非常感谢您的帮助。
编辑
您对此有何看法:如果我在一个列表中有一个包含所有
ORACLE SQL KEYWORDS
和 SQL SERVER KEYWORDS
和 MYSQL KEYWORDS
的列表,并且对于每个查询参数,我将其拆分为单词(也就是说,如果它包含空格),然后我检查以确保这些包含的单词都不是保留字,我会防止很多sql注入(inject)攻击。似乎有更好的方法。