webjxcom提示:程序员们写代码的时候讲究tdd(测试驱动开发):在实现一个功能前,会先写一个测试用例,然后再编写代码使之运行通过。其实当黑客sql injection时,同样是一个tdd的过程:他们会先尝试着让程序报错,然后一点一点的修正参数内容,当程序再次运行成功之时,注入也就随之
程序员们写代码的时候讲究tdd(测试驱动开发):在实现一个功能前,会先写一个测试用例,然后再编写代码使之运行通过。其实当黑客sql injection时,同样是一个tdd的过程:他们会先尝试着让程序报错,然后一点一点的修正参数内容,当程序再次运行成功之时,注入也就随之成功了。进攻:假设你的程序里有类似下面内容的脚本:$sql = “select id, title, content from articles where id = {$_get[”id”]}”;正常访问时其url如下:/articles.php?’由于我们没有过滤$_get[”id”]参数,所以必然会报错,可能会是类似下面的信息:supplied argument is not a valid mysql result resource in …这些信息就足以说明脚本存在漏洞了,我们可以再耍点手段:/articles.php?’/etc/passwd”)如此一来,/etc/passwd文件的内容就会显示在原本显示content的地方。当magic_quotes_gpc为on时:此时如果直接使用load_file(”/etc/passwd”)就无效了,因为单引号被转义了,但是还有办法:/articles.php?post|cookie|request)\s*\[/ {04 ignorecase = 105 if (match($0, /\$.*(sql|query)/)) {06 ignorecase = 007 output()08 next09 }10 }1112 function output()13 {14 $1 = $115 print “crud: ” $0 “\nfile: ” filename “\nline: ” fnr “\n”16 }此脚本可匹配出类似如下的问题代码,想要扩展匹配模式也容易,只要照猫画虎写if match语句即可。1:$sql = “select * from users where username = ”{$_post[”username”]}””;2:$res = mysql_query(“select * from users where username = ”{$_post[”username”]}””);使用前别忘了先chmod +x detect_sql_injection.awk,有两种调用方法:1:./detect_sql_injection.awk /path/to/php/script/file2:find /path/to/php/script/directory -name “*.php” | xargs ./detect_sql_injection.awk会把有问题的代码信息显示出来,样子如下:crud: $sql = “select * from users where username = ”{$_post[”username”]}””;file: /path/to/file.phpline: 123现实环境中有很多应用这个脚本的方法,比如说通过cron定期扫描程序源文件,或者在svn提交时通过钩子方法自动匹配。使用专业工具也好,检测脚本亦罢,都是被动的防守,问题的根本始终取决于在程序员头脑里是否有必要的安全意识,下面是一些必须要牢记的准则:1:数字型参数使用类似intval,floatval这样的方法强制过滤。2:字符串型参数使用类似mysql_real_escape_string这样的方法强制过滤,而不是简单的addslashes。3:最好抛弃mysql_query这样的拼接sql查询方式,尽可能使用pdo的prepare绑定方式。4:使用rewrite技术隐藏真实脚本及参数的信息,通过rewrite正则也能过滤可疑的参数。5:关闭错误提示,不给攻击者提供敏感信息:display_errors=off。6:以日志的方式记录错误信息:log_errors= />7:不要用具有file权限的账号(比如root)连接mysql,这样就屏蔽了load_file等危险函数。8:……网站安全其实并不复杂,总结出来就是一句话:过滤输入,转义输出。其中,我们上面一直讨论的sql injection问题就属于过滤输入问题,至于转义输出问题,其代表是cross-site scripting,但它不属于本文的范畴,就不多说了。文档:addslashes() versus mysql_real_escape_string()sql injection with mysqladvanced sql injection with mysqlmysql注入中导出字段内容的研究——通过注入导出webshell
转载自:http://www.aspnetjia.com/cont-328.html
以上就介绍了hp+mysql网站sql injection攻防,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。