1樓:匿名使用者
首先,注入存在的原因不是sql本身的漏洞,而是sql語句的問題,因為sql語句中存在引號和運算子這類功能符號,如果你對傳遞的引數不加過濾的話,非法使用者就可以通過輸入這類符號來判斷你的資料庫資訊,嚴重的可以直接進入資料庫中。
比如:select * from logon where name='123' and pwd='123'
如果使用者在name中輸入 admin' or 1=1 這樣這條語句就可以執行了。
這是簡單的原理,具體的注入攻擊比較複雜。防範的措施可以通過asp過濾特殊字元,最好的方法是用儲存過程。
2樓:
舉個例子來說吧(拿註冊登陸的例子):
假設我們對使用者的註冊的名字和登陸時的名字都不做處理,並且程式不作多重判斷。
那麼登陸的時候 填入使用者名稱: ' and 1=1 or '1'='1 密碼為:1'or '1'='1
asp接收到後放在sql語句裡。
把值傳進來 語句就成了:
strsql="select * from users where uname='' and 1=1 or '1'='1' and pass='1' or '1'='1'"
把這個語句傳給sqlserver,返回的就是所有的使用者記錄了。如果程式只判斷 返回的記錄是否大於0 ,那它登陸自然成功了!。
其他的比如**引數的sql注入等都是乙個道理,就是利用sql語句和程式的漏洞把非法的查詢語句傳給sqlserver。其實主要是利用了sqlserver的漏洞
3樓:
原因就是 sql 語法中, 有些特殊的字元,具有特殊的意義, 如果在處理時,沒有進行轉義, 就會產生非預期的效果。
還有就是 sql 的功能強大, 支援 巢狀, 多重之類的查詢
例如: ' 和 --
4樓:蒼月小兵
例
如果request("username")為(' and 'a'='a)括號裡邊的
這樣的話就會產生大量的資料集,就可以越過這一層的審核
asp程式設計中sql二次查詢,asp輸出sql查詢的結果應該怎麼寫
表名字看的好累,其實access完全可以用中文表名的。夜查次數這個沒看懂 是lianghuakaohe和faxianwenti連線,資料要兩個表都有,還是兩個表單獨統計?這個查詢可以先查詢出所有用,然後再返回欄位時查詢出各各統計資料select fullname,depname,select cou...
asp中sql查詢條件如何與陣列結合起來
du瓶邪 方法如下 procedure tmainform.bitbtn3click sender tobject varv sql string,v sql integer,v id string,v id integer string a array 1.3 of string b array ...
ASP中instr函式的用法,asp中的instrrev的用法
例如a,b,c三個字串 a abcdefg b cd c xz instr 1,a,b 的返回值是3 表示b字串出現在第3個字元開始的位置 instr 1,a,c 的返回值為0 表示c字串不出現在a字串中 instr 2,a,b 的返回值是3 表示b字串存在於第2位開始的a字串中,出現的位置在a字串...