php非法数据提交 非法数据包是什么原因( 四 )


PHP代码
?php
function inject_check($sql_str)
{
return eregi('select|insert|update|delete|'|
function verify_id($id=null)
{
if (!$id) { exit('没有提交参数!'); } // 是否为空判断
elseif (inject_check($id)) { exit('提交的参数非法!'); } // 注射判断
elseif (!is_numeric($id)) { exit('提交的参数非法!'); } // 数字判断
$id = intval($id); // 整型化
return $id;
}
?
呵呵 , 那么我们就能够进行校验了,于是我们上面的程序代码就变成了下面的:
PHP代码
?php
if (inject_check($_GET['id']))
{
exit('你提交的数据非法 , 请检查后重新提交!');
}
else
{
$id = verify_id($_GET['id']); // 这里引用了我们的过滤函数,对$id进行过滤
echo '提交的数据合法,请继续!';
}
?
好,问题到这里似乎都解决了,但是我们有没有考虑过post提交的数据,大批量的数据呢?
比如一些字符可能会对数据库造成危害,比如 ' _ ', ' %' , 这些字符都有特殊意义,那么我们如果进行控制呢?还有一点 , 就是当我们的php.ini里面的magic_quotes_gpc = off的时候,那么提交的不符合数据库规则的数据都是不会自动在前面加' '的,那么我们要控制这些问题 , 于是构建如下函数:
PHP代码
?php
function str_check( $str )
{
if (!get_magic_quotes_gpc()) // 判断magic_quotes_gpc是否打开
{
$str = addslashes($str); // 进行过滤
}
$str = str_replace("_", "\_", $str); // 把 '_'过滤掉
$str = str_replace("%", "\%", $str); // 把' % '过滤掉
return $str;
}
?
我们又一次的避免了服务器被沦陷的危险 。
最后,再考虑提交一些大批量数据的情况 , 比如发贴,或者写文章、新闻,我们需要一些函数来帮我们过滤和进行转换,再上面函数的基础上,我们构建如下函数:
PHP代码
?php
function post_check($post)
{
if (!get_magic_quotes_gpc()) // 判断magic_quotes_gpc是否为打开
{
$post = addslashes($post); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤
}
$post = str_replace("_", "\_", $post); // 把 '_'过滤掉
$post = str_replace("%", "\%", $post); // 把' % '过滤掉
$post = nl2br($post); // 回车转换
$post= htmlspecialchars($post); // html标记转换
return $post;
}
?
呵呵,基本到这里,我们把一些情况都说了一遍 , 其实我觉得自己讲的东西还很少,至少我才只讲了两方面,再整个安全中是很少的内容了,考虑下一次讲更多 , 包括php安全配置,apache安全等等,让我们的安全正的是一个整体,作到最安全 。
最后在告诉你上面表达的:1. 初始化你的变量 2. 一定记得要过滤你的变量
哪位PHP大神能帮我解释一下这段代码是啥意思呢?//屏蔽错误提示
error_reporting(0);
header("Content-Type: text/html; charset=utf-8"); // 设置网页编码,根据实际需要修改
//判断服务变量HTTP_REFERER是否存在,这个HTTP_REFERER参数是表示从哪里链接过来的,
//如百度过来的,如果直接输入网址进行访问是没有这个参数的 。
if( isset($_SERVER['HTTP_REFERER']) ) {
//分割参数为数组
$url_array = explode('http://', $_SERVER['HTTP_REFERER']);
//继续分割,目的是为了获取域名
$url = explode('/', $url_array[1]);
//如果来源网址不等于本网站网址则禁止访问
if($_SERVER['SERVER_NAME'] != $url[0]) {
exit('Access Denied! You are not coming from the site!');
}
} else {
//直接访问网址进行访问也不行

推荐阅读