程序的基础过滤和二次过滤
SQL 注入攻击的危害性非常大,严重影响着网站程序的安全,因此必须从网站程序设计初始就严防 SQL 注入漏洞的产生。在防范 SQL 注入时,程序设计者需要注意方方面面可能产生安全问题的地方,其关键所在就是用户数据输入口处。
基础过滤与二次过滤
在进行 SQL 注入攻击前,入侵者需要在可修改参数中提交“'”、“and”等特殊字符,以判断是否存在注入漏洞;在实施 SQL 注入时,需要提交“;”、“--”、“select”、“union”、“update”各种字符构造相应的 SQL 注入语句。
总之,SQL 注入攻击的存在是由于程序员在 ASP 或者其它的语言中,直接将变量在未经过滤和检测的情况下,直接引入到 SQL 语句中。
因此,防范 SQL 注入攻击的时候需要对用户的输入进行检查,确保用户输入数据的安全性。在具体检查用户输入或提交的变量时,可对单引号、双引号、分号,逗号、冒号、连接号等进行转换或者过滤,这样就可以在很大程度上防止 SQL 注入漏洞的产生。
例如,下面有一个 ID 变量的过滤代码:
[cc lang="asp"]
if instr(request("id")),",">0 or instr(request("id")),"insert")>0 o
r instr(request("id"),";")>0 then response.write"
response.end
end if
[/code]
上面这段小代码,仅是一个示例,它可以过滤 ID 参数变量中的“;”、“,”和“insert”字符,如果发现 ID 参数中有这几个字符的话,则返回出错页面。
当然,上面的这个示例过滤是不完全的,危险的字符远远不止这几个,要过滤其它的危险字符,只需要将危险字符用同样的方法重复加入即可。这里只是为了说明,在获取用户提交的参数时,一定要先进行基础的过滤。然而再根据程序相应的功能及用户输入可能性进行二次过滤。以保证程序的安全性。