• SQL注入攻击零距离


    一次次的SQL注射入侵,一次次的网站被黑,总是那句话,漏洞在所难免,难道一点办法都没吗?这篇文章就是为大家解析下SQL注 射的原理,以及给出一些预防方法。
    一:基础篇
    分析下漏洞产生的原因,主要还是参数没完全过滤。
    cntid = Request("cntid")
    这样的语句就存在一个注入攻击,首先,没验证是否为整数
    解决方法:
    <% dim cntid
    cntid =replace(request("cntid "),"","")
    if (not isnumeric(cntid)) then
    call error
    response.end
    end if
    sub Error()
    response.write " <table align=center width=300 border=0
    cellpadding=4 cellspacing=0 >"
    response.write " <tr > "
    response.write " <td colspan=2 height=15> "
    response.write " <div align=center>
    操作: 参数错误!</div>"
    response.write " </td>"
    response.write " </tr>"
    response.write " <tr> "
    response.write " <td colspan=2 height=23> "
    response.write " <div align=center><br><br>"
    response.write " 参数错误!!!非法探测已经被记录 <br><br>"
    response.write " <a href=javascript:onclick=history.go(-1)>返回</a>"
    response.write " <br><br></div></td>"
    response.write " </tr> </table></body></html>"
    end sub
    %>

    这是一个最基础的过滤,如果提交非法参数效果如图1:


    那么我们还需要注意什么?
    用户名的注册,必须过滤掉一些特殊符号,继续刚才的话题,我们假设是username.
    <% dim username
    username =replace(request("username "),"","")
    if Instr(username,"=")>0 or Instr(username,"%")>0 or Instr(username,chr(32))>0 or Instr(username,"?")>0 or Instr(username,"&")>0 or Instr(username,";")>0 or
    Instr(username,",")>0 or Instr(username,"")>0 or Instr(username,",")>0 or Instr
    (username,chr(34))>0 or Instr(username,chr(9))>0 or Instr(username,"")>0 or
    Instr(username,">")>0 or Instr(username,"<")>0 or Instr(username,"$")>0 or Instr
    (username,"#")>0 or Instr(username,"@")>0 then

    call error
    response.end
    end if
    sub Error()
    response.write " <table align=center width=300 border=0
    cellpadding=4 cellspacing=0 >"
    response.write " <tr > "
    response.write " <td colspan=2 height=15> "
    response.write " <div align=center>操作: 参数错
    误!</div>"
    response.write " </td>"
    response.write " </tr>"
    response.write " <tr> "
    response.write " <td colspan=2 height=23> "
    response.write " <div align=center><br><br>"
    response.write " 用户名中含有非法字符(“=”,“%”,
    “?”,“&”,“;”,“,”,“”,””,“>”,“<”,“$”,“#”,“@”) <br><br>"
    response.write " <a
    href=javascript:onclick=history.go(-1)>返回</a>"
    response.write " <br><br></div></td>"
    response.write " </tr> </table></body></html>"
    end sub
    %>
    利用这个原理,我们还能过滤一些可能存在cookies跨站脚本的地方:
    只要过滤cookie,java这样的字眼,方法同上。需要注意的事,类似与用户登陆的地方,用户名一定要username =replace(request("username "),"",""),意思就是把’过滤成”,这样做的目的就是预防’ or ‘’=’这样的入侵。
    可是如果类似www.xx.com/list.asp? action = search
    我们可以这样过滤
    <% action=request("action")
    select case action
    case "search"
    call search()
    case else
    call search()
    end select
    sub search ()
    这里是search的内容
    end sub
    %>
    大家可以看到无论对错,都执行search。这样也可以预防SQL。
    二:密码安全
    采用不可逆加密是必须的选择,防止别人探测到密码后暴力破解,MD5用艿氖迪址浅<虻ィ姹闳フ腋鯩D5函数体,很多源代码都 带。
    <!-- #include file=" md5.asp" --> 这里是引入MD5函数
    <% dim username
    username =md5(md5(replace(request("username "),"","")))
    %>
    这里就实现了2次MD5加密,一般2-3次就足够了,暴力破解比较困难:)
    COOKIES欺骗问题很严重,所以一般后台管理员一定要session验证。实现方法
    我们在登入成功后写入
    session("btadmin")=rsadmin("admin")
    建立一个验证函数cookies.asp
    内容如下
    <%
    if session("btadmin")="" then
    response.redirect "admin.asp"
    end if
    %>

    在每个管理员操作文件的开头加上
    <!--#include file="cookies.asp" -->
    这样就可以预防非法登陆了:)
    我们经常看到验证码这样的东西,这样做是为了预防暴力破解。
    实现方法,假设登入为login.asp
    我们在开头加:
    <%
    dim p
    randomize ‘对随机数生成器做初始化的动作
    p = Int((8999 * Rnd) + 1000)
    session("cntcode")=p %>

    插入验证代码的表格
    <tr>
    <td valign=middle>请输入验证码</td>
    <td valign=middle>
    <INPUT name=yanzhen type=text>
    在左边框输入: <%=session("cntcode")%></td></tr>

    最后验证程序:
    <%
    if request("yanzhen")="" or trim(session("cntcode"))
    <>trim(replace(request("yanzhen"),"","")) then
    response.write " 请正确输入您的验证码。"
    response.end
    else
    %>
    程序运行效果如图2:

    三:数据库安全
    爆库的方法越来越多,我们来看下:如图3

    按X档案以前文章一位大侠说的,将/替换为 %5c,确实很多网站都存在这样的漏洞。大家可以清楚的看到数据库地址。
    偶什么方法可以预防呢?
    。。。(代码见杂志)。。。。。。。。。。。

    这是一个数据库连接文件,大部分为conn.asp
    关键在与on error resume next出错了也执行下一句
    我们看下他的运行效果。


    除了图片显示不正常外,没暴露数据库:)
    其实浪心建议用WIN2003做服务器,当你用%5c 来替换的时候
    _blank>http://127.0.0.1/fourm.asp?cntid=4
    自动换成%5cfourm.asp/多个/
    _blank>http://127.0.0.1%5cfourm.asp/?cntid=4
    找不到服务器,唯一的结果,更厉害:)
    还有一种方法就是不让对方下载数据库
    方法是
    新建一个notdown表,字段为nodown, 数据类型为ole 如图4

    保存为mdb.mdb
    OK,我们写个nodown.asp
    代码如下
    。。。(代码见杂志)。。。。。。。。。。。
    把他同数据库一同上传到你的空间,或者本地做个IIS,运行nodown.asp
    提示添加记录成功。
    OK,把数据库重新命名为mdb.asp
    直接在浏览器里输入数据库地址:提示
    Active Server Pages 错误 ASP 0116
    丢失脚本关闭分隔符
    /bbs/cntlovebbs.asp,行 44042
    Script 块缺少脚本关闭标记(%>)。
    用快车下载提示HTTP 500错误
    OK到这里数据库安全也过去了:)下面说下浪心新的思维:)没任何技术难度,会VB的都会写:)
    四:安全的后台登入
    。。。(代码见杂志)。。。。。。。。。。。

    OK了:)程序简单的出奇,他的功能可不小哦:)你的网站可以比以前安全许多。
  • 相关阅读:
    经常使用的两个清爽的table样式
    wdcp新开站点或绑定域名打不开或无法访问的问题
    在线客服代码,可以用
    $smarty获取变量get,post等用法
    mysql 替换某个字段中的某个字符
    git 设置不需要输入密码
    linux批量查找文件内容
    使用PHP QR Code生成二维码
    RabbitMQ-2
    RabbitMQ-1
  • 原文地址:https://www.cnblogs.com/lgms2008/p/794792.html
Copyright © 2020-2023  润新知