免费SEO软件

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2296|回复: 1

acc数据库SQL防注入了好多M的乱码 如何解决

[复制链接]

122

主题

143

帖子

652

积分

超级版主

Rank: 8Rank: 8

积分
652
发表于 2014-6-4 12:15:52 | 显示全部楼层 |阅读模式
acc数据库SQL防注入了好多M的乱码 如何解决; 还有mysql数据库 一样的问题  请教高手解决。
回复

使用道具 举报

13

主题

21

帖子

246

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
246
发表于 2014-6-4 13:24:24 | 显示全部楼层
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.

acc数据库的asp程序怎么防注入:
Check_SQL.asp
<%
Sql_in="and |or |on |in |select |insert |update |delete |exec |declare |'"
  '防止GET方法--------------------------------------------------------
  '区分出注入字符
  Sql=Split(Sql_in,"|")
  '如果GET过来的数据不为空
  If Request.QueryString<>"" Then
      '逐一取出提交过来的参数
     For Each Sql_Get In Request.QueryString
     For Sql_Data=0 To Ubound(Sql)
      '判断是否包含非法字符
      IF Instr(Lcase(Request.QueryString(Sql_Get)),Sql(Sql_Data))<>0 Then
       '如果有非法字符,弹出对话框提示,并自动返回上一页
       Response.Write("<script>alert('系统提示:请不要输入非法字符尝试注入↓!');history.go(-1);</script>")
    Response.End()
   End IF
   Next
   Next
   End If
  '防止POST方法---------------------------------------------------
  IF Request.Form<>"" Then
     For Each Sql_Post In Request.Form
    For Sql_Data=0 To Ubound(Sql)
     IF Instr(Lcase(Request.Form(Sql_Post)),Sql(Sql_Data))<>0 Then
        Response.Write("<script>alert('系统提示:请不要输入非法字符尝试注入↓!');history.go(-1);</script>")
     Response.End()
     End IF
  Next
  Next
  End if
  '-----------------------------------------------------------
%>
在你检测登陆的页面,把上面的页面放到inc文件夹下 呵呵 专业一点就ok了
<!--#include file="inc/Check_SQL.asp" -->
你可以用 用户名'or'='or'密码 'or'='or'检测一下 嘿嘿


sql防注入代码2:
<%
dim sql_injdata ,SQL_inj,SQL_Get,SQL_Post,SQL_Cookies,SQL_Data
    SQL_injdata = "<%|script|insert|select|delete|exec|cast|update|chr|master|truncate|declarei|eval"
    if stopwords<>"" and instr(LCase(Request.ServerVariables("PATH_INFO")),"siteconfig.asp")=0 then
    SQL_injdata= SQL_injdata&"|"&stopwords
    end if
    SQL_inj = split(SQL_Injdata,"|")
      
if checksqlin="Yes" then
    If Request.Form<>"" Then StopInjection(Request.Form)
    If Request.QueryString<>"" Then StopInjection(Request.QueryString)
    If Request.Cookies<>"" Then StopInjection(Request.Cookies)
end if
  
Function StopInjection(values)
For Each SQL_Get In values
        For SQL_Data=0 To Ubound(SQL_inj)
          'if instr(LCase(request(SQL_Get)),Sql_Inj(Sql_DATA))>0 Then
            if instr(LCase(replace(request(SQL_Get),chr(34),"'")),Sql_Inj(Sql_DATA))>0 Then
             '“"”无法直接写入到变量“SQL_injdata”中,在这里替换“"”为“'”提示之  
            Response.Write "<script>alert('检测到非法信息,已禁止本次提交!');history.back()</script>"
            Response.end
          end if
        next
      Next
end function
%>

延伸2种方法:
以下为代码内容:放入conn.asp中(拒绝攻击 万能Asp防注入代码)
第一种:
squery=lcase(Request.ServerVariables("QUERY_STRING"))
sURL=lcase(Request.ServerVariables("HTTP_HOST"))
SQL_injdata =":|;|>|<|--|sp_|xp_|\|dir|cmd|^|(|)|+|$|'|copy|format|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|")
For SQL_Data=0 To Ubound(SQL_inj)
if instr(squery&sURL,Sql_Inj(Sql_DATA))>0 Then
Response.Write "SQL通用防注入系统"
Response.end
end if
next

第二种:
SQL_injdata =":|;|>|<|--|sp_|xp_|\|dir|cmd|^|(|)|+|$|'|copy|format|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|")
If Request.QueryString<>"" Then
For Each SQL_Get In Request.QueryString
For SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then
Response.Write "SQL通用防注入系统"
Response.end
end if
next
Next
End If
If Request.Form<>"" Then
For Each Sql_Post In Request.Form
For SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 Then
Response.Write "SQL通用防注入系统"
Response.end
end if
next
next
end if


最简单的防止sql注入的方法(php+mysql中):
SQL注入是一个很严重的问题,一个有经验的入侵者可以利用它存取敏感数据,或者破坏你的数据库,如果你不注意这个问题,将会对你网站和客户造成很大的损失。
我曾经很多这方面的向导,但是他们都试图 复杂化这个问题。说实话,在php+mysql的开发环境中,最简单的办法就是:利用mysql_real_escape_string函数传递你的数据。通过转意可以操作字段的特定的字符,避免了sql注入,请看下面的例子:

// 不安全的写法.
$query = "SELECT * FROM products WHERE name='$productname'";
mysql_query($query);
// 安全的写法
$query = sprintf("SELECT * FROM products WHERE name='%s'",
mysql_real_escape_string($productname));
mysql_query($query);


此方法仅在在php中有效,还要记住mysql_real_escape_string并不转意%和_。
怎么样,这个方法够简单吧!


.NET防SQL注入方法:
SQL语句
利用SqlCommand传参数的方法:
string strSQL="SELECT * FROM [user] WHERE user_id=@id";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = strSQL;
cmd.Parameters.Add("@id",SqlDbType.VarChar,20).Value=Request["id"].ToString();
过滤禁止运行法:

          /// <summary>
          /// 过滤SQL语句,防止注入
          /// </summary>
          /// <param name="strSql"></param>
          /// <returns>0 - 没有注入, 1 - 有注入 </returns>
          public int filterSql(string sSql)
          {
              int srcLen, decLen = 0;
              sSql = sSql.ToLower().Trim();
              srcLen = sSql.Length;
              sSql = sSql.Replace("exec", "");
              sSql = sSql.Replace("delete", "");
              sSql = sSql.Replace("master", "");
              sSql = sSql.Replace("truncate", "");
              sSql = sSql.Replace("declare", "");
              sSql = sSql.Replace("create", "");
              sSql = sSql.Replace("xp_", "no");
              decLen = sSql.Length;
              if (srcLen == decLen) return 0; else return 1;         
          }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|Archiver|手机版|小黑屋|百度优化软件

GMT+8, 2019-3-19 11:27 , Processed in 0.354317 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表