PHP防止注入攻击

原创 2012年03月23日 16:21:00

注入攻击不多说了

 

PHP addslashes() 函数--单撇号加斜线转义

定义和用法

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 addslashes($str) . " This is safe in a database query.";
?>

输出:

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 系统功能

 

 

 

内容说明

 

本函式取得 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(),是否麻烦了一点?由于从表单或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防注入和XSS攻击通用过滤

1.1 什么是XSS攻击 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏...
  • zhaoliang831214
  • zhaoliang831214
  • 2016年03月26日 11:21
  • 4716

PHP防止SQL注入和XSS攻击

PHP所有打印的语句如echo,print等,在打印前都要使用htmlentities() 进行过滤, 这样可以防止Xss,注意中文要写出htmlentities($name, ENT_NOQUOT...
  • u011781769
  • u011781769
  • 2015年09月15日 17:35
  • 2869

PHP中防XSS攻击和防sql注入

SQL注入如何防? TP中的底层已经做了防SQL注入的操作,只要我们操作数据库时使用TP提供给我们的方法就不会有问题,如添加商品时我们调用了add方法。唯一要注意的就是如果我们自己拼SQL执行时就要自...
  • Limitless1113
  • Limitless1113
  • 2015年06月04日 16:02
  • 2007

php:输入值/表单提交参数过滤,防止sql注入或非法攻击的方法

php:输入值/表单提交参数过滤,防止sql注入或非法攻击的方法
  • zyb_icanplay7
  • zyb_icanplay7
  • 2013年12月15日 01:05
  • 2369

php过滤提交数据 防止sql注入攻击

php过滤提交数据 防止sql注入攻击在SQL注入攻击 中,用户通过操纵表单或 GET 查询字符串,将信息添加到数据库查询中。例如,假设有一个简单的登录数据库。这个数据库中的每个记录都有一个用户名字段...
  • ljh504429906
  • ljh504429906
  • 2017年07月14日 10:05
  • 390

PHP防止被xss和sql语句注入攻击的方法(网站和app通用)

传过来的参数 如果是整数类型 那就直接用intval函数转化为整数 字符串 那就要用函数了 注意输入的内容htmlspecialchars过滤代码如下 // Anti_SQL Injection,...
  • oMiracle123
  • oMiracle123
  • 2017年05月12日 16:01
  • 187

PHP防止SQL注入和XSS攻击

PHP所有打印的语句如echo,print等,在打印前都要使用htmlentities() 进行过滤, 这样可以防止Xss,注意中文要写出htmlentities($name, ENT_NOQUOT...
  • u011781769
  • u011781769
  • 2015年09月15日 17:35
  • 2869

php过滤提交数据 防止sql注入攻击

http://netsecurity.51cto.com/art/201304/391939_all.htm php过滤提交数据 防止sql注入攻击 2013-04-26 11:26 thinki...
  • ljh504429906
  • ljh504429906
  • 2017年07月14日 09:49
  • 519

【代码】php过滤提交数据 防止sql注入攻击

规则 1:绝不要信任外部数据或输入 关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据。外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据...
  • u012275531
  • u012275531
  • 2013年10月09日 11:36
  • 679

防止 PHP的SQL 注入攻击

如何防止 php sql 注入攻击?我认为最重要的一点,就是要对数据类型进行检查和转义。总结的几点规则如下: 1. php.ini 中的 display_errors 选项,应该设为 display...
  • u012581409
  • u012581409
  • 2014年06月04日 10:46
  • 322
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP防止注入攻击
举报原因:
原因补充:

(最多只允许输入30个字)