国语自产精品视频在线看:您身边最放心的安全下载站! 最新软件|热门排行|软件分类|软件专题|厂商大全

国语自产精品视频在线看

技术教程
您的位置:首页网络编程Asp编程 → 初学ASP编程易犯的一个错误要注意

初学ASP编程易犯的一个错误要注意

我要评论 2009/06/20 21:29:59 来源:国语自产精品视频在线看 编辑:编辑整理 [ ] 评论:0 点击:291次

在【zài】ASP编程中,身份认证可以说是常要用到【yào yòng dào】🎚的🔷。但怎么【dàn zěn me】样才能🎸做到认证的安【zhèng de ān】📓全呢?

    表单提🎪交页面:sub.htm
<html>
    <head>
    <title>管理员【guǎn lǐ yuán】登陆</title>
    <body>
    <form name="form1" method="post" action="sub.asp">
    <p> 管理员【guǎn lǐ yuán】:
    <input type="text" name="UserID" size="25" maxlength="20">
    密🕵 码✉:
    <input type="text" name="Pass" size="12" maxlength="20">
    <input type="submit" name="Submit" value="提交【tí jiāo】">
    </p>
    </form>
    </body>
    </html>

    SUB.asp程序
    <%
    接收表单中的【dān zhōng de】数据【shù jù】♊
    user=request.from("UserID")
    检察表单提交🏤的数据【de shù jù】♊是否为空🥠(表单页【biǎo dān yè】面🍟可能你【kě néng nǐ】用【yòng】🙉JAVASCRIPT OR VBSCRIPT控制了,但这里【dàn zhè lǐ】也不要【yě bú yào】🛳忘记控制!
    if user="" then
    转到出错提示页面🍟!
    response.redirect "err1.htm"
    这一句可能没📦用【yòng】🙉,但加上🍶为好【wéi hǎo】🕖!
    response.end
    end if
    pass=request.from("Pass")
    if pass="" then
    response.redirect "err2.htm"
    response.end
    end if
    联接🛴数据【shù jù】♊库
    file=server.mappath("你的数【nǐ de shù】据♊库")
    set conn=server.createobject("adodb.connection")
    dr="driver={microsoft access driver (*.mdb)};dbq="&file
    conn.open dr
    set rs=server.createobject("adodb.recordset")
    关键是这里的SQL语言🏚
    sql="select * from 表 where user= "&user&" and pass= "&pass&" "
    rs.open sql
    if not rs.eof then
    找到的【zhǎo dào de】话就进【huà jiù jìn】🦆入管理页面🍟
    reponse.redirect "login.asp"
    else
    没找到【méi zhǎo dào】就进入错误页面🍟
    response.write "err3.htm"
    end if
    %>

    大家感觉以上代码应【dài mǎ yīng】该没问题啊【tí ā】,但是这里有一【lǐ yǒu yī】👽个严重的安全❔隐患🌙:

    我如果想登录【xiǎng dēng lù】🚐管理员的话可🐓以在SUb.htm表单输入【rù】🐉框中输入【rù】🐉:

    第一个文本框【wén běn kuàng】🕛中输入【zhōng shū rù】:a or 1 = 1 或✉ OR =

    第二个【dì èr gè】🧢文本框【wén běn kuàng】中输入:a or 1 = 1 或🈚 OR =

    提交【tí jiāo】,大家会看到♍...“呜,听我说完好【hǎo】不⭕好【hǎo】🎿,砖头一会再丢【huì zài diū】过来..."

    "a " 和“1”为任意【wéi rèn yì】字符🌇

    有人会【yǒu rén huì】😜问为什【wèn wéi shí】么你输🏦入这些字符会以管理【yǐ guǎn lǐ】🔔员身份进入呢??

    其实这🐦些字符【xiē zì fú】是对你程序中SQL语言的欺骗💐,而成功【ér chéng gōng】进入的【jìn rù de】🛸

    大家看🍩:开始程【kāi shǐ chéng】序SQL中是对🍨表进行【biǎo jìn háng】查询满【chá xún mǎn】足user= "&user&" and pass= "&pass&" "条件的记录🈲

    sql="select * from 表【biǎo】🌁 where user= "&user&" and pass= "&pass&" "

    我而输🏑入上面的代码后就成【hòu jiù chéng】了【le】🕖:

    sql="select * from 表【biǎo】✖ where user= a or 1 = 1 and pass= a or 1 = 1 "

    大家看看,能有不进入的【jìn rù de】🚞理由【yóu】吗??给我一个不进🎴入的理由【yóu】,先【xiān】🛫!

    以上USER PASS字段为👧字符型【zì fú xíng】 如果是数字型🔜也一样【yě yī yàng】的道理【de dào lǐ】😄!

    解决方🌤法【fǎ】:

    一【yī】、函数替🛬代法:

    用REPLACE将用户【jiāng yòng hù】🗝端输入的内容中含有【zhōng hán yǒu】特殊字符进行替换【tì huàn】,达到控制目的🎻啊🛂!sql="select * from 表【biǎo】🤰 where user= "&replace(user," "," ")&" and pass= "&replace(pass," "," ")&" "

    这种方法每次只能替😇换一个【huàn yī gè】🏖字符,其实危险的字符不只是🌜" ",还有如🐚">"、"<"、"&"、"%"等字符【děng zì fú】应该全【yīng gāi quán】控制起来【lái】。但用【dàn yòng】REPLACE函数好象不太胜任那怎么办【zěn me bàn】🚒呢🐾??

    二、程序控制法【zhì fǎ】🏪

    用【yòng】程序🏥来🧒对客户【duì kè hù】端输🕷入的内🔼容全部控制起来🧒,这样能全面控制用【zhì yòng】🍤户端输🕷入的任何可能【hé kě néng】的危险字符【fú】或代码,我就的✡这个方法【fǎ】❣!
<%
    捕捉用【bǔ zhuō yòng】🍤户端提交的表🦆单内容
    user=request.from("user")
    pass=request.from("pass")
    ...
    循环控【xún huán kòng】🥚制开始
    for i=1 to len(user)
    用【yòng】🍤MID函数读出变量user中【zhōng】i 位置的一个字符【fú】
    us=mid(user,i,1)
    将读出【jiāng dú chū】的字符【fú】🤩进行比😥较【jiào】
    if us=" " or us="%" or us="<" or us=">" or us="&" then
    如果含🚤有以上【yǒu yǐ shàng】💃字符将【zì fú jiāng】出错提示,不能含【bú néng hán】📦有以上【yǒu yǐ shàng】💃特殊字符【fú】
    response.redirect "err2.htm"
    response.end
    end if
    next
    ...
    %>

关键词:ASP

阅读本文后您有什么感想? 已有 人给出评价!

  • 0 欢迎喜欢
  • 0 白痴
  • 0 拜托
  • 0 哇
  • 0 加油
  • 0 鄙视