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

国语自产精品视频在线看

技术教程
您的位置:首页网络编程Asp编程 → ASP编程菜鸟易犯的一个错误

ASP编程菜鸟易犯的一个错误

我要评论 2009/07/07 19:45:46 来源:国语自产精品视频在线看 编辑:编辑整理 [ ] 评论:0 点击:492次

在【zài】📪ASP编程中,身份认【shēn fèn rèn】证可以🐜说是常要用到💎的。但怎么🌪样才能做到认证的安【zhèng de ān】全呢【quán ne】?

表单提【biǎo dān tí】交页面⚫:sub.htm 

以下为【yǐ xià wéi】😇引用的内容:

<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">
    密 码【mǎ】🖕:
    <input type="text" name="Pass" size="12" maxlength="20">
    <input type="submit" name="Submit" value="提交">
    </p>
    </form>
    </body>
    </html>

以下为引用【yòng】的😷内容【nèi róng】:
    SUB.asp程序【chéng xù】
    <%
    接收表单中的数据【de shù jù】
    user=request.from("UserID")
    检察表单提交的数据【de shù jù】是否为【shì fǒu wéi】💁空(表单页面📐可能你用【yòng】JAVASCRIPT OR VBSCRIPT控制了【kòng zhì le】😾,但这里【dàn zhè lǐ】也不要忘记控【wàng jì kòng】🖕制🚓!
    if user="" then
    转到出🗡错提示🏫页面📐!
    response.redirect "err1.htm"
    这一句可能没😑用【yòng】,但加上【dàn jiā shàng】为好😅!
    response.end
    end if
    pass=request.from("Pass")
    if pass="" then
    response.redirect "err2.htm"
    response.end
    end if
    联接数🕵据库😎
    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】🥃话就进入管理页面📐
    reponse.redirect "login.asp"
    else
    没找到【méi zhǎo dào】就进入错误页【cuò wù yè】面📐
    response.write "err3.htm"
    end if
    %>

大家感😊觉以上【jiào yǐ shàng】代码应该没问题啊【tí ā】🎀,但是这里有一个严重🤛的安全【de ān quán】隐患:

我如果想登录管理员🔑的话可👊以在【yǐ zài】SUb.htm表单输【biǎo dān shū】📙入框中【rù kuàng zhōng】输入:

第一个【dì yī gè】🛄文本框中输入🎮:a or 1 = 1 或【huò】 OR =

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

提交,大家会看到...“呜,听我说完好⛹不好【bú hǎo】⛹,砖头一🧢会再丢【huì zài diū】🕵过来【guò lái】..."

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

有人会【yǒu rén huì】问为什【wèn wéi shí】🐟么你输【me nǐ shū】入这些🍖字符会以管理员身份进入呢🎗??

其实这【qí shí zhè】些字符🎥是对你程序中SQL语言的🕷欺骗📖,而成功【ér chéng gōng】进入的【jìn rù de】

大家看:开始程序SQL中是对📯表进行查询满【chá xún mǎn】足【zú】🥧user= "&user&" and pass= "&pass&" "条件的🐫记录【jì lù】

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

我而输入上面的代码后就成了:

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

大家看【dà jiā kàn】🗣看🗣,能有不进入的【jìn rù de】理🚕由吗??给我一【gěi wǒ yī】🔹个不进入的【jìn rù de】理🚕由,先!

以上【yǐ shàng】🖇USER PASS字段为🌞字符型【zì fú xíng】 如果是🐤数字型【shù zì xíng】也一样的道理!

解决方法:

一、函数替代法:

用【yòng】⭕REPLACE将用【jiāng yòng】⭕户端输入的内容中含有【yǒu】🧜特殊字符进行替换,达到控🚪制目的【zhì mù de】🍤啊!sql="select * from 表 where user= "&replace(user," "," ")&" and pass= "&replace(pass," "," ")&" "

这种方⚽法每次【fǎ měi cì】只能替【zhī néng tì】换一个字符【zì fú】,其实危险的字🌉符不只🐗是📏" ",还有如">"、"<"、"&"、"%"等字符【děng zì fú】👯应该全🔽控制起来。但用REPLACE函数好象不太胜任那怎么办【zěn me bàn】呢【ne】??

二、程序控制法

用程序【yòng chéng xù】来🚵对客户端输入【duān shū rù】⛹的内容全部控制起♋来🚵,这样能全面控【quán miàn kòng】制用户【zhì yòng hù】端输入【duān shū rù】⛹的任何【de rèn hé】可能的危险字【wēi xiǎn zì】🏟符或代🚩码🧡,我就的这个方法!

以下为引用的😳内容【nèi róng】:
<%
    捕捉用⬛户端提【hù duān tí】交的表单内容【nèi róng】🗞
    user=request.from("user")
    pass=request.from("pass")
    ...
    循环控制开始
    for i=1 to len(user)
    用⬛MID函数读出变量user中i 位置的【wèi zhì de】一个字⛏符
    us=mid(user,i,1)
    将读出【jiāng dú chū】的字符【de zì fú】进行比较【jiào】
    if us=" " or us="%" or us="<" or us=">" or us="&" then
    如果含【rú guǒ hán】📕有以上😔字符将🥑出错提🎾示【shì】,不能含【bú néng hán】有以上😔特殊字符
    response.redirect "err2.htm"
    response.end
    end if
    next
    ...
    %> 

关键词:ASP编程

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

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