PHP防止注入攻击
2012-03-23 16:21
375 查看
注入攻击不多说了
这些预定义字符是:
单引号 (')
双引号 (")
反斜杠 (\)
NULL
?>[/code]输出:
get_magic_quotes_gpc函数
本函式取得 PHP 环境设定的变数 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。传回 0 表示关闭本功能;传回 1 表示本功能开启。当 magic_quotes_gpc 开启时,所有的 ' (单引号), " (双引号), \ (反斜线) and 空字符会自动转为含有反斜线的溢出字符。-----------------------addslashes -- 使用反斜线引用字符串描述string addslashes ( string str)返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。一个使用 addslashes() 的例子是当你要往数据库中输入数据时。例如,将名字 O'reilly 插入到数据库中,这就需要对其进行转义。大多数据库使用 \ 作为转义符:O\'reilly。这样可以将数据放入数据库中,而不会插入额外的 \。当 PHP 指令 magic_quotes_sybase 被设置成 on 时,意味着插入 ' 时将使用 ' 进行转义。默认情况下,PHP 指令 magic_quotes_gpc 为 on,它主要是对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。例子 1. addslashes() 示例$str = "Is your name O'reilly?";// 输出:Is your name O\'reilly?echo addslashes($str);?>get_magic_quotes_gpc()本函数取得 PHP 环境配置的变量 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。返回 0 表示关闭本功能;返回 1 表示本功能打开。当 magic_quotes_gpc 打开时,所有的 ' (单引号), " (双引号), \ (反斜线) and 空字符会自动转为含有反斜线的溢出字符。 magic_quotes_gpc对于 php.ini 中的 magic_quotes_gpc,是设置为 off 还是为 on 呢?
我个人观点,应该设置为 on
总结如下:
1. 对于magic_quotes_gpc=on的情况,
我们可以不对输入和输出数据库的字符串数据作
addslashes()和stripslashes()的操作,数据也会正常显示。
如果此时你对输入的数据作了addslashes()处理,
那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
2. 对于magic_quotes_gpc=off 的情况
必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出
因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。
补充:
magic_quotes_gpc 作用范围是:WEB客户服务端;作用时间:请求开始时,例如当脚本运行时.
magic_quotes_runtime 作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;作用时间:每次当脚本访问运行状态中产生的数据 代码:
PHP addslashes() 函数--单撇号加斜线转义
PHP String 函数定义和用法
addslashes() 函数在指定的预定义字符前添加反斜杠。这些预定义字符是:
单引号 (')
双引号 (")
反斜杠 (\)
NULL
语法
addslashes(string)
参数 | 描述 |
---|---|
string | 必需。规定要检查的字符串。 |
提示和注释
提示:该函数可用于为存储在数据库中的字符串以及数据库查询语句准备合适的字符串。注释:默认情况下,PHP 指令 magic_quotes_gpc 为 on,对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。例子
在本例中,我们要向字符串中的预定义字符添加反斜杠:<?php $str = "Who's John Adams?"; echo $str . " This is not safe in a database query.<br />"; echo [code]addslashes($str). " This is safe in a database query.";
?>[/code]输出:
Who's John Adams? This is not safe in a database query. Who\'s John Adams? This is safe in a database query.
get_magic_quotes_gpc函数
function html($str){ $str = get_magic_quotes_gpc()?$str:addslashes($str); return $str;}----------------get_magic_quotes_gpc取得 PHP 环境变数 magic_quotes_gpc 的值。语法: long get_magic_quotes_gpc(void);传回值: 长整数函式种类: PHP 系统功能 |
内容说明 |
我个人观点,应该设置为 on
总结如下:
1. 对于magic_quotes_gpc=on的情况,
我们可以不对输入和输出数据库的字符串数据作
addslashes()和stripslashes()的操作,数据也会正常显示。
如果此时你对输入的数据作了addslashes()处理,
那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
2. 对于magic_quotes_gpc=off 的情况
必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出
因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。
补充:
magic_quotes_gpc 作用范围是:WEB客户服务端;作用时间:请求开始时,例如当脚本运行时.
magic_quotes_runtime 作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;作用时间:每次当脚本访问运行状态中产生的数据 代码:
<?php /* 有时表单提交的变量不止一个,可能有十几个,几十个。那么一次一次地复制/粘帖addslashes(),是否麻烦了一点?由于从表单或URL获取的数据都是以数组形式出现的,如$_POST、$_GET)那就自定义一个可以“横扫千军”的函数 */ function quotes($content) { //如果magic_quotes_gpc=Off,那么就开始处理 if (!get_magic_quotes_gpc()) { //判断$content是否为数组 if (is_array($content)) { //如果$content是数组,那么就处理它的每一个单无 foreach ($content as $key=>$value) { $content[$key] = addslashes($value); } } else { //如果$content不是数组,那么就仅处理一次 addslashes($content); } } else { //如果magic_quotes_gpc=On,那么就不处理 } //返回$content return $content; } ?>
相关文章推荐
- PHP获取IP地址的方法,防止伪造IP地址注入攻击
- 如何防止 PHP SQL 注入攻击
- PHP+MYSQL如何防止脚本注入攻击
- PHP---防止注入攻击
- php里防止注入攻击
- php 编程下有效防止MySQL数据库注入攻击
- {php 编程下有效防止MySQL数据库注入攻击}
- php里防止注入攻击
- PHP防止被xss和sql语 cd6d 句注入攻击的方法(网站和app通用)
- 防止 PHP的SQL 注入攻击
- 如何防止 PHP SQL 注入攻击
- php里防止注入攻击
- php防止ddos,dns,集群攻击的实现代码
- 在ASP.NET中防止注入攻击
- ASP网站如何防止注入漏洞攻击
- ASP.NET中防止注入攻击
- 防止MySQL注入或HTML表单滥用的PHP程序
- PHP+SQL 注入攻击的技术实现以及预防办法
- PHP中通过语义URL防止网站被攻击的方法分享
- jdbc操作mysql数据库(防止注入攻击版本)