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

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

程序员文章站 2024-02-08 22:35:10
...
我做了个保健品站 http://www.bjp51.net 这两天有点问题,用360一扫,高危,只有49分,报告如下:



第一个是很严重的问题,今天想把第一个问题解决了。
看下360给出的意见


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



回复讨论(解决方案)

这是contrast.php的文件源码

alert('操作失败!至少要选中一条信息。');window.opener=null;window.open('','_self');window.close()";exit;} $tdwidth=floor(90/$i);//取整,左边占10%$sql="select * from zzcms_main where id in ($id)" ;$rs=mysql_query($sql);?>
【产品图片】 " target="_blank">网站出问题了,有漏洞,今天来这里请csdn的兄弟帮忙解决 alt="" border="0" >
【产品名称】
【主要功能】
【规格包装】
招商区域
产品说明
可提供的支持
对代理商的要求
备注

$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 指令中使用了传入的数据

$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 指令中使用了传入的数据



我是php小白,请问我应该怎么验证,怎么检查好呢?

还有我不检查,是不是很容易被注入呢?

 $id = $id . (intval($_POST['id'][$i]) . ',');

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,??就注入不到了。

安全级别:高危
安全等级打败了全国46%的网站!

$id=$id.(intval($_POST['id'][$i]).',');

传入的数据把单引号替换为两个连续的单引号 , sql语句用传入的参数时加上单引号。
$id = str_replace("'","''",$_POST['id']);
$sql = " select * from tb_user wher id='$id' ";
这样就不怕注入了。



谢谢 您们的回答 我目前是把$id=$id.($_POST['id'][$i].','); 替换成 $id = $id . (intval($_POST['id'][$i]) . ','

就对了

上面的不对,我改成这样了
if(!empty($_POST['id'])){
for($i=0; $i //$id=$id.($_POST['id'][$i].',');
$id = $id.(intval($_POST['id'][$i]).',');
}
$id=substr($id,0,strlen($id)-1);//去除最后面的","
}

这样是不是对了

if(!empty($_POST['id'])) {  $id = join(',', array_map('intval', $_POST['id']));}
最好把 $id 换个名字

if(!empty($_POST['id'])) {  $id = join(',', array_map('intval', $_POST['id']));}
最好把 $id 换个名字
我对php不熟,我就用这段代码,不用找变量了
感谢版主无私的精神。
我才发现,另一个问题也是您在为我解决,再次感谢!