滥用
![](/icons/82286include.gif)
1.漏洞原因:
Include是编写PHP网站WebSite中最常用
![](/icons/82286de.gif)
![](/icons/82286hanshu.gif)
![](/icons/82286dou.gif)
并且支持相对路径
![](/icons/82286dou2.gif)
有很多PHP脚本直接把某输入变量作为Include
![](/icons/82286de.gif)
参数
![](/icons/82286dou.gif)
造成任意引用脚本、绝对路径泄露等漏洞
![](/icons/82286dou2.gif)
看以下代码:
...
$
![](/icons/82286include.gif)
page=$_GET["
![](/icons/82286include.gif)
page"];
![](/icons/82286include.gif)
($
![](/icons/82286include.gif)
page);
...
很明显
![](/icons/82286dou.gif)
我们只需要提交区别
![](/icons/82286de.gif)
Includepage变量就可以获得想要
![](/icons/82286de.gif)
页面
![](/icons/82286dou2.gif)
如果提交
![](/icons/82286yi.gif)
个不存在
![](/icons/82286de.gif)
页面
![](/icons/82286dou.gif)
就可以使PHP脚本发生
![](/icons/82286cuowu.gif)
而泄露实际绝对路径(这个问题
![](/icons/82286de.gif)
解决办法在下面
![](/icons/82286de.gif)
文章有介绍说明)
![](/icons/82286dou2.gif)
2.漏洞解决:
这个漏洞
![](/icons/82286de.gif)
解决很简单
![](/icons/82286dou.gif)
就是先判断页面是否存在再进行Include
![](/icons/82286dou2.gif)
或者更严格地
![](/icons/82286dou.gif)
使用
![](/icons/82286shuzu.gif)
对可Include
![](/icons/82286de.gif)
文件作出规定
![](/icons/82286dou2.gif)
看以下代码:
$pagelist=
![](/icons/82286<img src=)
.gif' />("test1.php","test2.php","test3.php"); //这里规定可进行
![](/icons/82286include.gif)
![](/icons/82286de.gif)
文件
![](/icons/82286if.gif)
(is
![](/icons/82286set.gif)
($_GET["
![](/icons/82286include.gif)
page"])) //判断是否有$
![](/icons/82286include.gif)
page
{
$
![](/icons/82286include.gif)
page=$_GET["
![](/icons/82286include.gif)
page"];
foreach($pagelist as $prepage)
{
![](/icons/82286if.gif)
($
![](/icons/82286include.gif)
page
![](/icons/82286dd.gif)
$prepage) //检查文件是否在允许列表中
{
![](/icons/82286include.gif)
($prepage);
$checkfind=true;
![](/icons/82286break.gif)
;
}
}
![](/icons/82286if.gif)
($checkfind
![](/icons/82286dd.gif)
true){ un
![](/icons/82286set.gif)
($checkfind); }
![](/icons/82286else.gif)
{ die("无效引用页!"); }
}
这样就可以很好地解决问题了
![](/icons/82286dou2.gif)
小提示:有此问题
![](/icons/82286de.gif)
![](/icons/82286hanshu.gif)
还有:require
![](/icons/82286kh.gif)
![](/icons/82286dou.gif)
require_once
![](/icons/82286kh.gif)
![](/icons/82286dou.gif)
![](/icons/82286include.gif)
_once
![](/icons/82286kh.gif)
![](/icons/82286dou.gif)
readfile
![](/icons/82286kh.gif)
等
![](/icons/82286dou.gif)
在编写
![](/icons/82286de.gif)
时候也要注意
![](/icons/82286dou2.gif)
未对输入变量进行过滤
1.漏洞原因:
这个漏洞早在ASP中出现过
![](/icons/82286dou.gif)
当时造成
![](/icons/82286de.gif)
注入漏洞不计其数
![](/icons/82286dou2.gif)
但由于PHP在当时
![](/icons/82286de.gif)
影响力较小
![](/icons/82286dou.gif)
所以没有太多
![](/icons/82286de.gif)
人能够注意这点
![](/icons/82286dou2.gif)
对于PHP来说
![](/icons/82286dou.gif)
这个漏洞
![](/icons/82286de.gif)
影响性比ASP更大
![](/icons/82286dou.gif)
![](/icons/82286yinwei.gif)
有比较多
![](/icons/82286de.gif)
PHP脚本使用到文本型数据库
![](/icons/82286dou2.gif)
当然也存在SQL语句
![](/icons/82286de.gif)
注入问题
![](/icons/82286dou2.gif)
举个比较经典
![](/icons/82286de.gif)
例子
![](/icons/82286dou.gif)
首先是数据库
![](/icons/82286de.gif)
:
$id=$_GET["id"];
$query="SELECT * FROM my_table where id='".$id."'"; //很经典
![](/icons/82286de.gif)
SQL注入漏洞
$result=mysql_query($query);
这里很明显我们可以用注入来获得数据库
![](/icons/82286de.gif)
其它内容了
![](/icons/82286dou2.gif)
这里就不再详细叙述
![](/icons/82286dou.gif)
和ASP注入
![](/icons/82286yi.gif)
样
![](/icons/82286de.gif)
![](/icons/82286dou.gif)
大家可以看看以前
![](/icons/82286de.gif)
黑防
![](/icons/82286dou2.gif)
然后我们看文本数据库
![](/icons/82286de.gif)
问题:
$text1=$_POST["text1"];
$text2=$_POST["text2"];
$text3=$_POST["text3"];
$fd=fopen("test.php","a");
fwrite($fd,"\r\n$text1&line;$text2&line;$text3");
fclose($fd);
文本
![](/icons/82286de.gif)
漏洞可以说是更加严重
![](/icons/82286dou2.gif)
倘若我们
![](/icons/82286de.gif)
提交
![](/icons/82286de.gif)
变量中插入
![](/icons/82286yi.gif)
段很小
![](/icons/82286de.gif)
PHP代码
![](/icons/82286dou.gif)
就可以另这个文本数据库test.php变成PHP后门
![](/icons/82286dou2.gif)
甚至插入上传代码
![](/icons/82286dou.gif)
让我们可以上传
![](/icons/82286yi.gif)
个完善
![](/icons/82286de.gif)
PHP后门
![](/icons/82286dou2.gif)
接着提升权限
![](/icons/82286dou.gif)
服务器就是你
![](/icons/82286de.gif)
了
![](/icons/82286dou2.gif)
2.漏洞解决:
这个漏洞
![](/icons/82286de.gif)
解决思路方法其实很简单
![](/icons/82286dou.gif)
就是严格对全部提交
![](/icons/82286de.gif)
变量进行过滤
![](/icons/82286dou2.gif)
对
![](/icons/82286yi.gif)
些敏感
![](/icons/82286de.gif)
![](/icons/82286zifu.gif)
进行替换
![](/icons/82286dou2.gif)
我们可以借助PHP提供
![](/icons/82286de.gif)
htmlspecialchars
![](/icons/82286kh.gif)
![](/icons/82286hanshu.gif)
来替换HTML
![](/icons/82286de.gif)
内容
![](/icons/82286dou2.gif)
这里给出
![](/icons/82286yi.gif)
段例子:
//构造过滤
![](/icons/82286hanshu.gif)
function flt_tags($text)
{
$badwords=
![](/icons/82286<img src=)
.gif' />("操你妈","fuck"); //词汇过滤列表
$text=rtrim($text);
foreach($badwords as $badword) //这里进行词汇
![](/icons/82286de.gif)
过滤
{
![](/icons/82286if.gif)
(stristr($text,$badword)
![](/icons/82286dd.gif)
true){ die("
![](/icons/82286cuowu.gif)
:你提交
![](/icons/82286de.gif)
内容含有敏感字眼
![](/icons/82286dou.gif)
请不要提交敏感内容
![](/icons/82286dou2.gif)
"); }
}
$text=htmlspecialchars($text); //HTML替换
//这两行把回车替换为
$text=str_replace("\r"," ",$text);
$text=str_replace("\n","",$text);
$text=str_replace("&line;","│",$text); //文本数据库分隔符"&line;"替换为全角
![](/icons/82286de.gif)
"│"
$text=preg_replace("/\s{ 2 }/"," ",$text); //空格替换
$text=preg_replace("/\t/"," ",$text); //还是空格替换
![](/icons/82286if.gif)
(get_magic_quotes_gpc
![](/icons/82286kh.gif)
){ $text=stripslashes($text); } //如果magic_quotes开启
![](/icons/82286dou.gif)
则进行\'
![](/icons/82286de.gif)
替换
![](/icons/82286return.gif)
$text;
}
$text1=$_POST["text1"];
$text2=$_POST["text2"];
$text3=$_POST["text3"];
//过滤全部输入
$text1=flt_tags($text1);
$text2=flt_tags($text2);
$text3=flt_tags($text3);
$fd=fopen("test.php","a");
fwrite($fd,"\r\n$text1&line;$text2&line;$text3");
fclose($fd);
经过
![](/icons/82286yi.gif)
番替换和过滤后
![](/icons/82286dou.gif)
你就可以安全地把数据写入文本或数据库了
![](/icons/82286dou2.gif)
管理员判断不完全
1.漏洞原因:
我们用PHP写脚本
![](/icons/82286dou.gif)
通常要涉及管理员
![](/icons/82286de.gif)
权限问题
![](/icons/82286dou2.gif)
而
![](/icons/82286yi.gif)
些脚本仅仅对管理员权限作出"是"判断
![](/icons/82286dou.gif)
而往往忽略了"否"判断
![](/icons/82286dou2.gif)
在PHP配置文件中register_globals打开
![](/icons/82286de.gif)
情况下(4.2.0以后版本默认关闭
![](/icons/82286dou.gif)
但有不少人为了方便而打开它
![](/icons/82286dou.gif)
这是极度危险
![](/icons/82286de.gif)
行为)
![](/icons/82286dou.gif)
就会出现提交变量冒充管理员
![](/icons/82286de.gif)
情况
![](/icons/82286dou2.gif)
我们看
![](/icons/82286yi.gif)
下
![](/icons/82286de.gif)
例子代码:
$cookiesign="admincookiesign"; //判断是否Admin
![](/icons/82286de.gif)
cookie变量
$adminsign=$_COOKIE["sign"]; //获取用户
![](/icons/82286de.gif)
cookie变量
![](/icons/82286if.gif)
($adminsign
![](/icons/82286dd.gif)
$cookiesign)
{
$admin=true;
}
![](/icons/82286if.gif)
($admin){ echo "现在是管理员状态
![](/icons/82286dou2.gif)
"; }
看上去好像很安全
![](/icons/82286de.gif)
样子
![](/icons/82286dou.gif)
呵呵
![](/icons/82286dou2.gif)
现在我们假设PHP配置文件中register_globals为打开状态
![](/icons/82286dou2.gif)
我们提交这样
![](/icons/82286yi.gif)
个地址“test.php?admin=true”
![](/icons/82286dou.gif)
结果看到了吗?我们虽然没有正确
![](/icons/82286de.gif)
Cookie
![](/icons/82286dou.gif)
但由于register_globals为打开状态
![](/icons/82286dou.gif)
使得我们提交
![](/icons/82286de.gif)
admin变量自动注册为true
![](/icons/82286dou2.gif)
而且脚本缺少“否”判断
![](/icons/82286dou.gif)
就使得我们顺利地通过admin=true取得管理员
![](/icons/82286de.gif)
权限了
![](/icons/82286dou2.gif)
这个问题存在于大部分网站WebSite和论坛当中
![](/icons/82286dou2.gif)
2.漏洞解决:
解决这个问题
![](/icons/82286dou.gif)
我们只需要在脚本中加入对管理员
![](/icons/82286de.gif)
“否”判断即可
![](/icons/82286dou2.gif)
我们仍然假设PHP配置文件中register_globals为打开状态
![](/icons/82286dou2.gif)
看
![](/icons/82286yi.gif)
下
![](/icons/82286de.gif)
代码:
$cookiesign="admincookiesign"; //判断是否Admin
![](/icons/82286de.gif)
cookie变量
$adminsign=$_COOKIE["sign"]; //获取用户
![](/icons/82286de.gif)
cookie变量
![](/icons/82286if.gif)
($adminsign
![](/icons/82286dd.gif)
$cookiesign)
{
$admin=true;
}
![](/icons/82286else.gif)
{
$admin=false;
}
![](/icons/82286if.gif)
($admin){ echo "现在是管理员状态
![](/icons/82286dou2.gif)
"; }
这样
![](/icons/82286dou.gif)
就算攻击者在没有正确Cookie
![](/icons/82286de.gif)
情况下提交了admin=true
![](/icons/82286de.gif)
变量
![](/icons/82286dou.gif)
脚本在以后
![](/icons/82286de.gif)
判断中也会把$admin设置为False
![](/icons/82286dou2.gif)
这样就解决了部分
![](/icons/82286de.gif)
问题
![](/icons/82286dou2.gif)
但由于$admin是变量
![](/icons/82286dou.gif)
倘若在以后
![](/icons/82286de.gif)
其他脚本引用中出现了漏洞使得$admin被重新赋值就会引发新
![](/icons/82286de.gif)
危机
![](/icons/82286dou2.gif)
因此
![](/icons/82286dou.gif)
我们应该使用常量来存放管理员权限
![](/icons/82286de.gif)
判定
![](/icons/82286dou2.gif)
使用Define
![](/icons/82286kh.gif)
语句定义
![](/icons/82286yi.gif)
个admin常量来记录管理员权限
![](/icons/82286dou.gif)
在此以后若配重新赋值就会出错
![](/icons/82286dou.gif)
达到保护
![](/icons/82286de.gif)
目
![](/icons/82286de.gif)
![](/icons/82286dou2.gif)
看以下代码:
$cookiesign="admincookiesign"; //判断是否Admin
![](/icons/82286de.gif)
cookie变量
$adminsign=$_COOKIE["sign"]; //获取用户
![](/icons/82286de.gif)
cookie变量
![](/icons/82286if.gif)
($adminsign
![](/icons/82286dd.gif)
$cookiesign)
{
![](/icons/82286define.gif)
(admin,true);
}
![](/icons/82286else.gif)
{
![](/icons/82286define.gif)
(admin,false);
}
![](/icons/82286if.gif)
(admin){ echo "现在是管理员状态
![](/icons/82286dou2.gif)
"; }
值得注意
![](/icons/82286de.gif)
是
![](/icons/82286dou.gif)
我们使用了Define语句
![](/icons/82286dou.gif)
所以在
![](/icons/82286diaoyong.gif)
Admin常量时前面不要习惯性
![](/icons/82286de.gif)
加变量符号$
![](/icons/82286dou.gif)
而应该使用Admin和!admin
![](/icons/82286dou2.gif)
文本数据库暴露
1.漏洞原因:
前面已经说过
![](/icons/82286dou.gif)
由于文本数据库具有很大
![](/icons/82286de.gif)
灵活性
![](/icons/82286dou.gif)
不需要任何外部支持
![](/icons/82286dou2.gif)
加上PHP对文件
![](/icons/82286de.gif)
处理能力十分强
![](/icons/82286dou.gif)
因此文本数据库在PHP脚本中
![](/icons/82286de.gif)
应用甚广
![](/icons/82286dou2.gif)
甚至有几个很好
![](/icons/82286de.gif)
论坛
![](/icons/82286chengxu.gif)
就是使用文本数据库
![](/icons/82286de.gif)
![](/icons/82286dou2.gif)
但有得必有失
![](/icons/82286dou.gif)
文本数据库
![](/icons/82286de.gif)
安全性也是比其他数据库要低
![](/icons/82286de.gif)
![](/icons/82286dou2.gif)
2.漏洞解决:
文本数据库作为
![](/icons/82286yi.gif)
个普通
![](/icons/82286de.gif)
文件
![](/icons/82286dou.gif)
它可以被下载
![](/icons/82286dou.gif)
就像MDB
![](/icons/82286yi.gif)
样
![](/icons/82286dou2.gif)
所以我们要用保护MDB
![](/icons/82286de.gif)
办法来保护文本数据库
![](/icons/82286dou2.gif)
把文本数据库
![](/icons/82286de.gif)
后缀名改为.PHP
![](/icons/82286dou2.gif)
并在数据库
![](/icons/82286de.gif)
第
![](/icons/82286yi.gif)
行加入
![](/icons/82286dou2.gif)
这样文本数据库就会作为
![](/icons/82286yi.gif)
个PHP文件
![](/icons/82286dou.gif)
并且在第
![](/icons/82286yi.gif)
行退出执行
![](/icons/82286dou2.gif)
也就是返回
![](/icons/82286yi.gif)
个空页面
![](/icons/82286dou.gif)
从而达到保护文本数据库
![](/icons/82286de.gif)
目
![](/icons/82286de.gif)
![](/icons/82286cuowu.gif)
路径泄露
1.漏洞原因:
PHP遇到
![](/icons/82286cuowu.gif)
时
![](/icons/82286dou.gif)
就会给出出错脚本
![](/icons/82286de.gif)
位置、行数和原因
![](/icons/82286dou.gif)
例如:
Notice: Use of un
![](/icons/82286define.gif)
d constant test - assumed 'test' in D:\
![](/icons/82286int.gif)
erpub\bigfly\test.php _disibledevent=>
$errstr=str_replace(getcwd
![](/icons/82286kh.gif)
,"",$errstr);
}
switch($errno)
{
![](/icons/82286case.gif)
E_ERROR:
echo "ERROR: [ID $errno] $errstr (Line: $errline of $errfile)
\n";
echo "
![](/icons/82286chengxu.gif)
已经停止运行
![](/icons/82286dou.gif)
请联系管理员
![](/icons/82286dou2.gif)
";
//遇到Error级
![](/icons/82286cuowu.gif)
时退出脚本
exit;
![](/icons/82286break.gif)
;
![](/icons/82286case.gif)
E_WARNING:
echo "WARNING: [ID $errno] $errstr (Line: $errline of $errfile)
\n";
![](/icons/82286break.gif)
;
default:
//不显示Notice级
![](/icons/82286de.gif)
![](/icons/82286break.gif)
;
}
}
//把
![](/icons/82286cuowu.gif)
处理设置为my_error_handler
![](/icons/82286set.gif)
_error_handler("my_error_handler");
…
这样
![](/icons/82286dou.gif)
就可以很好地解决安全和调试方便
![](/icons/82286de.gif)
矛盾了
![](/icons/82286dou2.gif)
而且你还可以花点心思
![](/icons/82286dou.gif)
使
![](/icons/82286cuowu.gif)
提示更加美观以配合网站WebSite
![](/icons/82286de.gif)
风格
![](/icons/82286dou2.gif)
不过注意两点是:
(1)E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING是不会被这个句柄处理
![](/icons/82286de.gif)
![](/icons/82286dou.gif)
也就是会用最原始
![](/icons/82286de.gif)
方式显示出来
![](/icons/82286dou2.gif)
不过出现这些
![](/icons/82286cuowu.gif)
都是编译或PHP内核出错
![](/icons/82286dou.gif)
在通常情况下不会发生
![](/icons/82286dou2.gif)
(2)使用
![](/icons/82286set.gif)
_error_handler
![](/icons/82286kh.gif)
后
![](/icons/82286dou.gif)
error_reporting
![](/icons/82286kh.gif)
将会失效
![](/icons/82286dou2.gif)
也就是所有
![](/icons/82286de.gif)
![](/icons/82286cuowu.gif)
(除上述
![](/icons/82286de.gif)
![](/icons/82286cuowu.gif)
)都会交给自定义
![](/icons/82286de.gif)
![](/icons/82286hanshu.gif)
处理
![](/icons/82286dou2.gif)
其它有有关
![](/icons/82286set.gif)
_error_handler
![](/icons/82286kh.gif)
![](/icons/82286de.gif)
信息
![](/icons/82286dou.gif)
大家可以参考PHP
![](/icons/82286de.gif)
官方手册
![](/icons/82286dou2.gif)
POST漏洞
1.漏洞原因:
前面已经说过
![](/icons/82286dou.gif)
依靠register_globals来注册变量是个不好
![](/icons/82286de.gif)
习惯
![](/icons/82286dou2.gif)
在
![](/icons/82286yi.gif)
些留言本和论坛
![](/icons/82286chengxu.gif)
中
![](/icons/82286dou.gif)
更要严格检查获得页面
![](/icons/82286de.gif)
方式和提交
![](/icons/82286de.gif)
时间间隔
![](/icons/82286dou2.gif)
以防止灌水式发帖和外部提交
![](/icons/82286dou2.gif)
我们看
![](/icons/82286yi.gif)
下以下某留言本
![](/icons/82286chengxu.gif)
![](/icons/82286de.gif)
代码:
...
$text1=flt_tags($text1);
$text2=flt_tags($text2);
$text3=flt_tags($text3);
$fd=fopen("data.php","a");
fwrite($fd,"\r\n$text1&line;$text2&line;$text3");
fclose($fd);
...
很明显
![](/icons/82286de.gif)
![](/icons/82286dou.gif)
如果我们提交网址”post.php?text1=testhaha&text2=testhaha&text3=testhaha”
![](/icons/82286dou2.gif)
数据就会被正常写入文件中
![](/icons/82286dou2.gif)
此
![](/icons/82286chengxu.gif)
并没有检测变量
![](/icons/82286de.gif)
来源和浏览器获得页面
![](/icons/82286de.gif)
方式
![](/icons/82286dou2.gif)
如果我们向这个页面重复多次提交
![](/icons/82286dou.gif)
就会起到洪水
![](/icons/82286de.gif)
作用
![](/icons/82286dou2.gif)
现在也有
![](/icons/82286yi.gif)
些软件Software利用这个漏洞来在论坛或留言本上发广告
![](/icons/82286dou.gif)
这是可耻
![](/icons/82286de.gif)
行为(我朋友
![](/icons/82286de.gif)
留言本就在1星期内被灌了10多页
![](/icons/82286dou.gif)
无奈)
![](/icons/82286dou2.gif)
2.漏洞解决:
在进行数据处理和保存前
![](/icons/82286dou.gif)
首先判断浏览器
![](/icons/82286de.gif)
获得页面方式
![](/icons/82286dou2.gif)
使用$_SERVER["REQUEST_METHOD"]变量来获得浏览器
![](/icons/82286de.gif)
获得页面方式
![](/icons/82286dou2.gif)
检查其是否为”POST”
![](/icons/82286dou2.gif)
在脚本中使用session来记录用户是否通过正常途径(即填写提交内容
![](/icons/82286de.gif)
页面)来提交数据
![](/icons/82286dou2.gif)
或使用$_SERVER["HTTP_REFERER"]来检测
![](/icons/82286dou.gif)
但不推荐这样做
![](/icons/82286dou2.gif)
![](/icons/82286yinwei.gif)
部分浏览器没有设置REFERER
![](/icons/82286dou.gif)
有部分防火墙也会屏蔽REFERER
![](/icons/82286dou2.gif)
另外
![](/icons/82286dou.gif)
我们也要对提交内容检查
![](/icons/82286dou.gif)
看数据库中是否有重复内容
![](/icons/82286dou2.gif)
以留言本为例
![](/icons/82286dou.gif)
使用Session进行判定:
填写浏览内容
![](/icons/82286de.gif)
页面中
![](/icons/82286dou.gif)
我们在最前端加上:
$_SESSION["allowgbookpost"]=time
![](/icons/82286kh.gif)
; //登记填写时
![](/icons/82286de.gif)
时间
在接受留言数据并保存
![](/icons/82286de.gif)
页面中我们在进行数据处理前我们也用Session进行以下处理:
![](/icons/82286if.gif)
(strtoupper($_SERVER["REQUEST_METHOD"])!=”POST”){ die("
![](/icons/82286cuowu.gif)
:请勿在外部提交
![](/icons/82286dou2.gif)
"); } //检查页面获得思路方法是否为POST
![](/icons/82286if.gif)
(!is
![](/icons/82286set.gif)
($_SESSION["allowgbookpost"]) or (time
![](/icons/82286kh.gif)
-$_SESSION["allowgbookpost"] < 10)){ die("
![](/icons/82286cuowu.gif)
:请勿在外部提交
![](/icons/82286dou2.gif)
"); } //检查留言填写时
![](/icons/82286de.gif)
时间
![](/icons/82286if.gif)
(is
![](/icons/82286set.gif)
($_SESSION["gbookposttime"]) and (time
![](/icons/82286kh.gif)
-$_SESSION["gbookposttime"] < 120)){ die("
![](/icons/82286cuowu.gif)
:两次提交留言
![](/icons/82286de.gif)
间隔不得少于 2 分钟
![](/icons/82286dou2.gif)
"); } //检查留言间隔
un
![](/icons/82286set.gif)
($_SESSION["allowgbookpost"]); //注销allowgbookpost变量以防止
![](/icons/82286yi.gif)
次进入填写页面多次进行提交
$_SESSION["gbookposttime"]=time
![](/icons/82286kh.gif)
; //登记发送留言
![](/icons/82286de.gif)
时间
![](/icons/82286dou.gif)
防止灌水或恶意攻击
...
数据处理及保存
...
经过这样重重审查
![](/icons/82286dou.gif)
你
![](/icons/82286de.gif)
![](/icons/82286chengxu.gif)
就安全很多了