免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4062 | 回复: 11
打印 上一主题 下一主题

这样防数据库注入行吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-04 23:15 |只看该作者 |倒序浏览
网址类似这样:
http://www.abc.com/CJDLT.php?Class=885
http://www.abc.com/CJDLT.php

就是我希望的Class变量是数字(目前在1~4位数),或者为空

我用以下的方法来对Class进行验证,安全吗?可以避免数据库被注入吗?

$Id=!empty($_GET['Class'])?$_GET['Class']:$_POST['Class'];
if ($Id != strval(intval($Id)) && !empty($Id)){
    header('Location: /sorry.php');
//跳到出错页面提示;  
}
if (strlen($Id) >4){
            header('Location: /sorry.php');
            //   跳到出错页面提示;
 }

论坛徽章:
0
2 [报告]
发表于 2008-08-05 07:46 |只看该作者
<?php
      if(is_set($_GET['class'])&&(int)$_get['class']<1000&&(int)$_get['class']>0)
       $id=(int)$_get['class'];
?>

这样写更简单点。

[ 本帖最后由 wildlily980 于 2008-8-5 10:50 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-08-05 08:34 |只看该作者
谢谢wildlily980  的解答,又学了一招~

论坛徽章:
0
4 [报告]
发表于 2008-08-05 08:57 |只看该作者
$id = intval($_GET['class']);

论坛徽章:
0
5 [报告]
发表于 2008-08-05 09:19 |只看该作者
$id = (int)$_GET['class'];
!$id && header('Location: /sorry.php');

论坛徽章:
0
6 [报告]
发表于 2008-08-05 09:56 |只看该作者
!$id && header('Location: /sorry.php');
或者:
!$id || header('Location: /sorry.php');
第一次看这个用法的时候是在 php168 那里看到的...
不知道这样的用法是怎么来的呢?我只是知道这个用法,但是不知道手册上面哪里有啊...

论坛徽章:
0
7 [报告]
发表于 2008-08-05 11:54 |只看该作者

回复 #4 hiler 的帖子

谢谢关注,好思路~

论坛徽章:
0
8 [报告]
发表于 2008-08-05 11:56 |只看该作者
原帖由 xdoer 于 2008-8-5 09:19 发表
$id = (int)$_GET['class'];
!$id && header('Location: /sorry.php');


原来还有更简洁的~~

论坛徽章:
0
9 [报告]
发表于 2008-08-05 13:39 |只看该作者

回复 #1 yoursmile 的帖子

考虑到当Class为空的时候,设置Class=1
结合上面各位的意见,我把代码改成了这样:
$Class=$_GET['Class'];
if(empty($Class)||$Class == strval(intval($Class)) && strlen($Class)<5)
$Class=$Class==""?1:$Class;
else header('Location: /sorry.php');

由于(int)$_GET['class'];使用后,发现对于"数字+字符"这样的值,仍然执行了数据库操作,很不爽,还是不用了.

[ 本帖最后由 yoursmile 于 2008-8-5 13:43 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2008-08-05 14:16 |只看该作者
原帖由 je1024 于 2008-8-5 09:56 发表
!$id && header('Location: /sorry.php');
或者:
!$id || header('Location: /sorry.php');
第一次看这个用法的时候是在 php168 那里看到的...
不知道这样的用法是怎么来的呢 ...

手册上没有,这个无非是个变形而已...不过速度比if来得快..所以我就尽量使用这样的方式
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP