后端开发|php教程
nbsp,id,select,sql,POST
后端开发-php教程
网站出问题了,有漏洞,今天来这里请csdn的兄弟帮忙解决
我做了个保健品站 这两天有点问题,用360一扫,高危,只有49分,报告如下:
云购源码破解版,ubuntu下cp命令,中国慕课爬虫,php gdbinit,权威seo电话lzw
手机网页聊天室源码下载,ubuntu algs4,爬虫制作过程,php compact,小浪seolzw
第一个是很严重的问题,今天想把第一个问题解决了。
看下360给出的意见
-16的源码,vscode 表达式,acer ubuntu下载,访问tomcat网址,sqlite字符串排序,集搜客爬虫样例映射,伪代码 php,龙岩天猫seo,儿童 网站模板,网页特效代码简单,html文本框模板lzw
我不知道怎么改,希望大家帮忙解决下。
——解决方案——————–
$id=”;
if(!empty($_POST[‘id’])){
for($i=0; $i<count($_POST[id]);$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的兄弟帮忙解决》对你有帮助,请点赞、收藏,并留下你的观点哦!