本文以实例形式详细分析了PHP防止注入攻击的方法。分享给大家供大家参考。具体分析如下:
代码如下:
<?php<br />$str = "Who's John Adams?";<br />echo $str . " This is not safe in a database query.<br />";<br />echo addslashes($str) . " This is safe in a database query.";<br />?>
输出:
Who’s John Adams? This is not safe in a database query.
Who\’s John Adams? This is safe in a database query.
代码如下:
function html($str)<br />{<br /> $str = get_magic_quotes_gpc()?$str:addslashes($str);<br /> return $str;<br />}
get_magic_quotes_gpc:
取得 PHP 环境变数 magic_quotes_gpc 的值。
语法: long get_magic_quotes_gpc(void);
传回值: 长整数
函式种类: PHP 系统功能
内容说明:
本函式取得 PHP 环境设定的变数 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。传回 0 表示关闭本功能;传回 1 表示本功能开启。当 magic_quotes_gpc 开启时,所有的 ‘ (单引号), ” (双引号), \ (反斜线) and 空字符会自动转为含有反斜线的溢出字符。
代码如下:
$str = "Is your name O'reilly?";<br />// 输出:Is your name O\'reilly?<br />echo addslashes($str);<br />?><br />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 <br />/* <br />有时表单提交的变量不止一个,可能有十几个,几十个。那么一次一次地复制/粘帖addslashes(),是否麻烦了一点?由于从表单或URL获取的数据都是以数组形式出现的,如$_POST、$_GET)那就自定义一个可以“横扫千军”的函数 <br />*/ <br />function quotes($content) <br />{ <br />//如果magic_quotes_gpc=Off,那么就开始处理 <br />if (!get_magic_quotes_gpc()) { <br />//<strong style="color:transparent">来2源gaodaima#com搞(代@码&网</strong><label>搞gaodaima代码</label>判断$content是否为数组 <br />if (is_array($content)) { <br />//如果$content是数组,那么就处理它的每一个单无 <br />foreach ($content as $key=>$value) { <br />$content[$key] = addslashes($value); <br />} <br />} else { <br />//如果$content不是数组,那么就仅处理一次 <br />addslashes($content); <br />} <br />} else { <br />//如果magic_quotes_gpc=On,那么就不处理 <br />} <br />//返回$content <br />return $content; <br />} <br />?>
希望本文所述对大家的PHP程序设计有所帮助。