我每天都使用 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 (\')
替换(字符,带,字符串)-> 替换(字符,带,字符串,[])。在几个例子上测试它:
替换(_,_,[],完成)-> 列表:反向(完成); 替换(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 注入攻击。似乎有更好的方法。