13sql注入修复

Posted 技术骨干小李

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了13sql注入修复相关的知识,希望对你有一定的参考价值。

sql注入--13sql注入修复

sql注入修复

一般思路

过滤

(1)针对SQL注入漏洞,需要对网站所有参数中提交的数据进行过滤,禁止输入"'“、“xor”、“or”、”–“、”#"、“select”、"and"等特殊字符;

(2)所有的查询语句都使用数据库提供的参数化查询接口,SQL语句使用参数化处理后的数据作为输入,而不是将用户输入变量嵌入到SQL语句中;

权限

严格限制网站用户对数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害;

回显

避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者收集这些错误信息进行判断进而执行SQL注入攻击。

php参数为int型的sql注入漏洞

Intval()函数用于获取变量的整数值

php参数为字符串型的sql注入漏洞

Addslashes() 返回在预定义字符之前添加反斜杠的字符串

其中的预定义字符是什么自己搜

数据库为GBK时,可以使用宽字节注入

如何修复SQL注入漏洞

参考技术A   以下是OMG我为大家收集整理的文章,希望对大家有所帮助。

  SQL注入是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。其实就是就是提交精心构造的数据库语句,使其反馈一些有用的数据。说白了就是去欺骗数据库,假如只有web服务器的话,是没法进行SQL注入的。

  网上常用的注入手法有两种,一种是猜测,让数据库暴出用户名、密码等信息;另一种直接绕过认证,取得权限。相对应,要想修复此类漏洞,就必须禁止特殊数据的提交或将特殊提交的数据修改。

  下面是不同脚本语言下的防注入过滤代码,其实思想是一致的。

  1、 PHP防注入过滤代码

  php 代码复制内容到剪贴板

  <!-- ?php

  /*************************

  说明: 判断传递的变量中是否含有非法字符 如$_POST、$_GET

  功能: 防注入

  使用方法: 将下列代码保存为ak,php,调用方式 在数据提交页加上include("ak.php");

  **************************/

  function dowith_sql($str)

  //实现将特征码两边加.

  

  $refuse_str="exec|and|or|select|update|from|where|order|by|*|delete||insert|into|values|create|table|

  database|set|char|asc|cast|declare| </script|script|iframe|3bomb|c.js|;";>

  //定义防注入的字符

  $arr=explode("|",$refuse_str);

  //将$refuse_str中的值单独取出

  for($i=0;$i<count($arr);$i++) p=""> </count($arr);$i++)>

  

  $replace="[".$arr[$i]."]";

  $str=str_replace($arr[$i],$replace,$str);

  //在变量$str中搜索字符串$arr[$i],并将其替换为字符串[$replace]

  

  return $str;

  

  foreach ($_GET as $key=>$value)

  //遍历获GET方法获得的参数$_GET的值传给$key,并赋值给$value

  

  $_GET[$key]=dowith_sql($value);

  //将$value中的特征码处理传个$_GET[$key]

  

  foreach ($_POST as $key=>$value)

  

  $_POST[$key]=dowith_sql($value);

  

  ?>

  上面的防注入的方法只是防了GET与POST方法提交的数据,但是,WEB服务器读取数据的顺序是,先取GET中的数据,没有再去POST中的数据,没有还会再去COOKIES中的数据,上面的代码还没有防cookies注入。防cookies注入就比较简单了,cookies的id值一般只为阿拉伯数字,但是cookies注入必须得在id中构造代码,只要在获得参数UID后,对其进行过滤就可以了,代码如下:

  php 代码复制内容到剪贴板

  <!-- ?php

  if($_COOKIE[id]!=null)

  //判断cookies不为空

  foreach ($_COOKIE[id] as $key=>$id)

  //读取cookies中的值

  if (is_numeric($id)<0)

  echo " ";

  

  

  }

  ?>

  将上述代码保存为hk.php。

  所以在平时应用时,在网页上加上include("ak.php");与include("hk.php");

  2、 ASP防注入过滤代码

  <%

  --------说明------------------

  使用方法: 在需要防注的页面头部用 SSI ʱ B>
包含就可以了

  友情提示:把代码复制到CONN.asp(数据库连接文件) 那么,只要包含了CONN的所有文件都防注了

  -------- ------------------------

  Dim xf_Post,xf_Get,xf_In,xf_Inf,xf_Xh,xf_db,xf_dbstr

  自定义需要过滤的字串,用 "|" 分隔

  xf_In = "|;|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"

  xf_Inf = split(xf_In,"|")

  If Request.Form<>"" Then

  For Each xf_Post In Request.Form

  For xf_Xh=0 To Ubound(xf_Inf)

  If Instr(LCase(Request.Form(xf_Post)),xf_Inf(xf_Xh))<>0 Then

  Response.Write ""

  Response.Write "非法操作!系统做了如下记录↓
"

  Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"
"

  Response.Write "操作时间:"&Now&"
"

  Response.Write "操作页面:"&Request.ServerVariables("URL")&"
"

  Response.Write "提交方式:POST
"

  Response.Write "提交参数:"&xf_Post&"
"

  Response.Write "提交数据:"&Request.Form(xf_Post)

  Response.End

  End If

  Next

  Next

  End If

  If Request.QueryString<>"" Then

  For Each xf_Get In Request.QueryString

  For xf_Xh=0 To Ubound(xf_Inf)

  If Instr(LCase(Request.QueryString(xf_Get)),xf_Inf(xf_Xh))<>0 Then

  Response.Write ""

  Response.Write "非法操作!系统已经给你做了如下记录↓
"

  Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"
"

  Response.Write "操作时间:"&Now&"
"

  Response.Write "操作页面:"&Request.ServerVariables("URL")&"
"

  Response.Write "提交方式:GET
"

  Response.Write "提交参数:"&xf_Get&"
"

  Response.Write "提交数据:"&Request.QueryString(xf_Get)

  Response.End

  End If

  Next

  Next

  End If

  %>

  同样,再将cookies防一下,代码加在数据提交页。

  if(Request.Cookies["uid"]!=null)

  

  uid=Request.Cookies["uid"].value;

  isnumeric cooidesID = new isnumeric();

  //这是一个类

  if (cooidesID.reIsnumeric(ruid))

  //如果是数字就运行下面的

  

  string str="select * from userTable where id="+uid;

  ...

  

  

  3、 JSP防注入过滤代码

  

以上是关于13sql注入修复的主要内容,如果未能解决你的问题,请参考以下文章

网站代码sql注入攻击漏洞修复加固防护措施

discuzX3.2 X3.4网站漏洞修复 SQL注入与请求伪造***利用与修复

网站漏洞检测公司对wordpress sql注入漏洞代码审计与修复

(2020上半年第13天(SQL注入-防注入绕过(SQL注入8/10)))小迪网络安全笔记

Mybatis框架下易产生SQL注入漏洞的场景和修复方法

如何修复SQL注入漏洞