php.ini+防止sql注入,php中防sql注入的一些简单php.ini配置与php函数

1.magic_quotes_gpc(魔术引号开关)

magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误。

在magic_quotes_gpc = On的情况下,如果输入的数据有

单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符都会被加上反斜线。这些转义是必须的,如果这个选项为Off,那么我们就必须调用addslashes这个函数来为字符串增加转义。

这个特性在PHP5.3.0中已经废弃并且在5.4.0中已经移除了。一切的编程都需要在 magic_quotes_gpc=Off下进行了。在这样的环境下如果不对用户的数据进行转义,后果不仅仅是程序错误而已了。同样的会引起数据库被注入攻击的危险。所以从现在开始大家都不要再依赖这个设置为On了。

php较低版本(php version <= 5.4.0)会对所有的GET、POST和COOKIE 数据自动运行addslashes()。因为较低版本的php,magic_quotes_gpc默认开启,所以,此时您不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时,可以使用函数get_magic_quotes_gpc()进行检测。

参考链接 :https://www..com/joshua317/articles/3939718.html

https://www..com/windclouds/p/5412888.html

https://segmentfault.com/a/1190000008227307

2.htmlentities()与htmlspecialchars()

htmlentities() 转换所有具有 HTML 实体的字符。

语法:  htmlentities(string,flags,character-set,double_encode)

参数

描述

string

必需。规定要转换的字符串。

flags

可选。规定如何处理引号、无效的编码以及使用哪种文档类型。

可用的引号类型:

ENT_COMPAT - 默认。仅编码双引号。

ENT_QUOTES - 编码双引号和单引号。

ENT_NOQUOTES - 不编码任何引号。

character-set

可选。一个规定了要使用的字符集的字符串。

允许的值:

UTF-8 - 默认。ASCII 兼容多字节的 8 位 Unicode

double_encode

可选。布尔值,规定是否编码已存在的 HTML 实体。

TRUE - 默认。将对每个实体进行转换。

FALSE - 不会对已存在的 HTML 实体进行编码

htmlentities()更多参数 参考 http://www.w3school.com.cn/php/func_string_htmlentities.asp

htmlentities() 可以对用户输入具有HTML 实体的字符的数据进行转义,比如单引号字符,可以防御说sql注入,再比如'

htmlspecialchars()函数仅对以下字符转义,其他的与htmlentities()差不多,包括各个参数的默认值

字符

替换后

& (& 符号)

&

" (双引号)

",除非设置了 ENT_NOQUOTES

' (单引号)

设置了 ENT_QUOTES 后, ' (如果是 ENT_HTML401) ,或者 ' (如果是 ENT_XML1、 ENT_XHTML 或 ENT_HTML5)。

< (小于)

<

> (大于)

>

关于htmlspecialchars()更多参数参考:http://www.w3school.com.cn/php/func_string_htmlspecialchars.asp

3.addslashes()函数stripslashes()函数

3.1)string addslashes ( string $str )

返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。

3.2)stripslashes — 反引用一个引用字符串

说明

string stripslashes ( string $str )

反引用一个引用字符串。

Note:

如果 magic_quotes_sybase 项开启,反斜线将被去除,但是两个反斜线将会被替换成一个。

一个使用范例是使用 PHP 检测 magic_quotes_gpc 配置项的 开启情况(在 PHP 5.4之 前默认是开启的)并且你不需要将数据插入到一个需要转义的位置(例如数据库)。例如,你只是简单地将表单数据直接输出。

参数

str

输入字符串。

返回值

返回一个去除转义反斜线后的字符串(\' 转换为 ' 等等)。双反斜线(\\)被转换为单个反斜线(\)。

4.mysql_real_escape_string() 函数

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。

下列字符受影响:

\x00

\n

\r

\

'

"

\x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

语法

mysql_real_escape_string(string,connection)

参数

描述

string

必需。规定要转义的字符串。

connection

可选。规定 MySQL 连接。如果未规定,则使用上一个连接。

说明

本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于 mysql_query()。

提示和注释

提示:可使用本函数来预防数据库攻击。

附以下代码:

include("./connect.php");

$a=$_GET['c'];

$a = mysql_real_escape_string($a);

echo $a."
";

$sql = "select * from user where username = '$a'";

echo $sql;

$sql=mysql_query($sql);

var_dump($sql);

var_dump(mysql_num_rows($sql));

if(mysql_num_rows($sql)>0)

echo "OK";

?>

运行结果为:

63334cbf8f29f19245cf136241736aaa.png

-----------------------------------------------------------------------------未完待续------------------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值