国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

在ASP程序中執行SQL語句的安全性問題

2019-11-18 20:13:44
字體:
來源:轉載
供稿:網友
asp程序中,如果我們的程序設計不當,就有可能面臨數據庫被別人控制的危險

以下是一個簡單的用戶更改密碼的代碼
---------------------
username=request("user_name")
pwd=request("pwd")
username=replace(username,"'","''")
pwd=replace(pwd,"'","''")
sql="update tbl_test set pwd='" & pwd & "' where uid='" & username & "'"
set rs=conn.execute (sql)

--------------
現在,假如我注冊一個用戶,用戶名為 aa'; exec sp_addlogin 'haha

當該用戶更改密碼時(假設改為pp),會出現什么后果呢??

sql變為 update tbl_test set pwd='pp' where uid='aa' ; exec sp_addlogin 'haha'

結果是用戶密碼沒有被修改,因為沒有 aa這個用戶,
但在你的數據庫中創建了一個登陸,新登陸名為 haha

將用戶名稍加修改,實際上可以運行任何sql語句,任何sql系統過程
而這一切都在你不知情的情況下發生的,實際上,上面的只是一個

示范,稍微修改一下用戶名,我們可以做添加一個DBA賬號,刪除所

有紀錄,讀取用戶密碼等越權操作。

 

 解決的辦法:

在你使用參數前,對參數進行嚴格檢驗,尤其是用戶輸入的參數

不但要對其數據類型,長度進行檢查,還要對其內容進行檢查。


我們再看一段代碼。(用戶登陸)

username=request("user_name")
pwd=request("pwd")
username=replace(username,"'","''")
pwd=replace(pwd,"'","''")

sql="select uid,pwd from account where  uid='" & username & "'  and pwd='" & pwd "'"
rs.open sql,conn,1,1
if not rs.eof then
response.write  rs(0) & "歡迎您,您已登陸成功"
else
response.write  "登陸失敗,錯誤的用戶名或密碼"
end if
............
以上程序的漏洞是顯而易見的 
我們可以以          用戶名:   admin       密碼:   a' or '1'='1
輕易以admin的賬號登陸系統
因為我們的sql 變為了
select uid,pwd from account where  uid='admin' and pwd='a' or '1'='1'
顯然 uid='admin' and pwd='a' or '1'='1'是恒為成立的所以  rs.eof 為false

正確的寫法應為
sql="select uid,pwd from account where  uid='" & username & "'  and pwd='" & pwd "'"
rs.open sql,conn,1,1
if rs(0)=username and rs(1)=pwd then
response.write  rs(0) & "歡迎您,您已登陸成功"
else
response.write  "登陸失敗,錯誤的用戶名或密碼"
end if

 

----全文完--------


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安徽省| 如皋市| 南宁市| 武定县| 洛川县| 五大连池市| 邮箱| 六盘水市| 镇雄县| 凤庆县| 海兴县| 高淳县| 文成县| 汕头市| 松阳县| 湟源县| 宁都县| 香港| 行唐县| 仁怀市| 和平区| 永修县| 靖安县| 三穗县| 阳谷县| 高阳县| 赣州市| 蒙阴县| 乡城县| 蛟河市| 巨鹿县| 南涧| 河间市| 新源县| 奇台县| 当雄县| 尉氏县| 镇雄县| 巴楚县| 同德县| 化德县|