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