魔术引号、addslashes和mysql 您所在的位置:网站首页 addslashes函数不能过滤 魔术引号、addslashes和mysql

魔术引号、addslashes和mysql

2024-05-29 21:38| 来源: 网络整理| 查看: 265

0x00:php内置过滤函数

php有内置的函数用来防御***,简单的介绍几个函数。

魔术引号

当打开时,所有的 '(单引号),"(双引号),\(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义。这和 addslashes() 作用完全相同。

一共有三个魔术引号指令:

magic_quotes_gpc 影响到 HTTP 请求数据(GET,POST 和 COOKIE)。不能在运行时改变。在 PHP 中默认值为 on。 参见 get_magic_quotes_gpc()。

magic_quotes_runtime 如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。该选项可在运行的时改变,在 PHP 中的默认值为 off。 参见 set_magic_quotes_runtime() 和 get_magic_quotes_runtime()。

magic_quotes_sybase 如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 ''。而双引号、反斜线 和 NULL 字符将不会进行转义。 如何取得其值参见 ini_get()。

mysql_real_escape_string

转义sql语句中使用的字符串中的特殊字符:\x00、\n、\r、\、'、"、\x1a

addslashes()

返回在预定义字符之前添加反斜杠的字符串,预定义字符:'、"、\、NULL

看了很多php网站在防sql注入上还在使用ddslashes和str_replace,百度一下"PHP防注入"也同样在使用他们,实践发现就连mysql_real_escape_string也有***可以绕过的办法,如果你的系统仍在用上面三个方法,建议更好。

用str_replace以及各种php字符替换函数来防注入已经不用我说了,这种“黑名单”式的防御已经被证明是经不起时间考验的。

下面给出绕过addslasher和mysql_real_escape_string的方法(Trick)。

如果你不确定你的系统是否有SQL注入的风险,请将下面的下面的DEMO部署到你的服务器,如果运行结果相同,那么请参考最后的完美的解决方案。

mysql:

mysql> select version(); +---------------------+ | version()           | +---------------------+ | 5.0.45-community-ny | +---------------------+ 1 row in set (0.00 sec) mysql> create database test default charset GBK; Query OK, 1 row affected (0.00 sec) mysql> use test; Database changed mysql> CREATE TABLE users (     username VARCHAR(32) CHARACTER SET GBK,     password VARCHAR(32) CHARACTER SET GBK,     PRIMARY KEY (username) ); Query OK, 0 rows affected (0.02 sec) mysql> insert into users SET username='ewrfg', password='wer44'; Query OK, 1 row affected (0.01 sec) mysql> insert into users SET username='ewrfg2', password='wer443'; Query OK, 1 row affected (0.01 sec) mysql> insert into users SET username='ewrfg4', password='wer4434'; Query OK, 1 row affected (0.01 sec)=

php:



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有