PHP MYSQL注入攻击需要预防7个要点

it2023-12-22  67

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=on和error_log=filename,定期排查,Web日志最好也查。

7:不要用具有FILE权限的账号(比如root)连接MySQL,这样就屏蔽了load_file等危险函数。

 

MYSQL注入中,load_file()函数在获得webshell以及提权过程中起着十分重要的作用,常被用来读取各种配置文件,如:

/usr/local/app/apache2/conf/httpd.conf //apache2 缺省配置文件

/usr/local/app/php5/lib/php.ini //PHP相关设置

/etc/sysconfig/iptables //从中得到防火墙规则策略

c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码

c:\Program Files\Serv-U\ServUDaemon.ini 

c:\windows\my.ini //MYSQL配置文件

c:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件

 

MYSQL帐号权限足够高的话,理论上load_file()函数可以读取任何文件,只是因为浏览器的编码不能完全显示二进制编码的文件,从而无法把load_file()出来的二进制文件存储并加以利用。其实这个问题很容易解决,只要用hex()函数把用load_file()函数读出的二进制文件转为十六进制,就可以把二进制文件以十六进制编码的形式完全显示在网页上。

最新回复(0)