php 中 mysql 数据库的 sql 注入与全面防范
SQL Injection 问题在 ASP 上闹得沸沸扬扬,php 也不免于难。为此我们也会采取一些防范。
php 的配置,主要是用到它的配置文件 php.ini。为了安全,一般都会打开 php.ini 的安全模
式即让 safe_mode=on,还有就是将返回 php 执行错误的 display_errors=off,关闭错误显示后,
php 函数执行的错误将不会显示给用户(其中会返回很多有用的信息)。在 php 的配置文
件 php.ini 中还有一个非常重要的配置选项 magic_qutoes_gpc,虽然在高版本中默认的都是
magic_qutoes_gpc=on,但是在一些低版本中默认的是 magic_qutoes_gpc=off,当设置为 on 是会
把提交的变量中所有的 '. "" . \ 和空字符会自动转为含有反斜线的转义字符,如把’变成了\,
把 \ 变成了 \.
以下将通过具体实例来描述在 php 中的 mysql 的 sql 注入问题以及怎样去防范。
一.从 mysql 语法
1.Select
!"""
#$%&'$()* +,)
$+-.
/012*
'34 +,!"""
&34#5 6 2 6% +,%.,5+(%
&!"""
常用的就是这些,select_expression指想要检索的列,后面我们可以用where来限制条件,也
可以用 5*将的结果输出到文件中。
实例:
<form method=“POST” action=“<? echo $PHP_SELF; ?>“>
<input type=“text” name=“search”><br>
<input type=“submit” value=“Search”>
</form>
<?php
………
SELECT * FROM users WHERE username LIKE ‘%$search%’ ORDER BY
username
…….
?>
进行注入,在表单提交aabb%’ or 1=1 order by id#
注:#在mysql 中表示注释的意思,即让后面的sql 语句不执行。" * "用来匹配字段名,而"
% "用来匹配字段值,77匹配任意字符。
评论1