欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

网站出有关问题了,有漏洞,今天来这里请csdn的兄弟帮忙解决

程序员文章站 2022-05-19 23:43:37
...
网站出问题了,有漏洞,今天来这里请csdn的兄弟帮忙解决
我做了个保健品站 http://www.bjp51.net 这两天有点问题,用360一扫,高危,只有49分,报告如下:

网站出有关问题了,有漏洞,今天来这里请csdn的兄弟帮忙解决

第一个是很严重的问题,今天想把第一个问题解决了。
看下360给出的意见
网站出有关问题了,有漏洞,今天来这里请csdn的兄弟帮忙解决

我不知道怎么改,希望大家帮忙解决下。



------解决方案--------------------
$id='';
if(!empty($_POST['id'])){
for($i=0; $i$id=$id.($_POST['id'][$i].',');
}
$id=substr($id,0,strlen($id)-1);//去除最后面的","
}
$sql="select * from zzcms_main where id in ($id)"

他认为你未经检查就在 sql 指令中使用了传入的数据
------解决方案--------------------
SQL注入的原理是,从地址栏或者表单中注入


如果你从地址栏得到一个$_GET["a"],不经过过滤就直接使用到程序中,就会造成威胁。比如:

如果$_GET["a"]=1;那么:
$sql = "SELECT * FROM AA WHERE id =$_GET["a"]";就是$sql = "SELECT * FROM AA WHERE id =1";
但如果别人通过地址栏自行修改,把$_GET["a"]的值改为1 or (and) XXX各类代码,那这个查询语句就变成

$sql = "SELECT * FROM AA WHERE id =1 or(and) xxx";


于是就中招了。

所以地址栏和表单得到的参数,一定要格式化,过滤好,指定是什么类型,多长,限制哪些字符……
------解决方案--------------------
$sql="select * from zzcms_main where id in ($id)" ;
$id沒有進行過濾,用戶輸入什麼都可以,當然被注入了。

因為id只能是數字,所以可以用intval轉成數字,如果非數字會轉為0,這樣就注入不到了。
------解决方案--------------------
传入的数据把单引号替换为两个连续的单引号 , sql语句用传入的参数时加上单引号。
$id = str_replace("'","''",$_POST['id']);
$sql = " select * from tb_user wher id='$id' ";
这样就不怕注入了。
------解决方案--------------------
if(!empty($_POST['id'])) {
$id = join(',', array_map('intval', $_POST['id']));
}
最好把 $id 换个名字
网站出有关问题了,有漏洞,今天来这里请csdn的兄弟帮忙解决

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频