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 中怎么拦截数据库异常sql语句问题是没有必要拦截的,如果把sql语句输出来让用户看到是件危险的事情,至于数据库或其他异常,可以参考set_error_handler(array('错误处理类', '方法')),然后建立一个自己的错误处理类和方法 , 自己对错我进行处理,上面的函数也能让php触发错误时自动调用
记得采纳啊
怎样拦截数据库操作的异常?用try ..except .当法度榜样不处于调试态时,截获缺点用 ON EXCEPTION例如with query1 do操作数据库缺点不会弹出提示框.begin.... close ; sql.clear ; sql.add('insert into tb values(0,0)'); try execute ; except .... on E: Exception do //截获缺点 ErrMessage := E.Message ; if Pos('PRIMARY KEY',ErrMessage)0 then {如不雅是主键反复} begin ProcError(ERR_PRIMARYKEY) ; begin end begin {如不雅其它缺点} ProcError(ERR_OTHERERROR) ; end ; end ; end ; elseend ;
php如何拦截数据库异常的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于php防止sql注入的最佳方式、php如何拦截数据库异常的信息别忘了在本站进行查找喔 。
推荐阅读
- 广州网红直播机构排名,广州网红直播基地在哪里
- 百度开源gis,百度开源社区
- flutter基础系列,flutter flutter
- word怎么添加横线写字,word怎么加横线可以填字
- php的数据库中文乱码 php数据库语句
- 三星电视上网不稳定怎么办,三星电视总是显示网络异常
- 模拟飞行游戏手感好吗,模拟飞行游戏手感好吗
- pythonmysql数据库,python的数据库
- vb.net参考 vbnet instr