sql攻擊跟如何防止

2021-08-27 09:49:48 字數 1072 閱讀 9943

源:

評:

應該也可以做到,但正則不是一種高效的方法,用htmlencode的方法可以有效防止空格等被dbms解釋,但注意別把編碼、解碼搞反了;儲存過程是dbms執行的一段程式,把資料操縱交給儲存過程執行,而不是提交sql語句,可以有效防止sql注入。

3、位址列的sql攻擊,下面我引用了一段資料解釋,他關於機制說的較清楚,關於解決,只是從客戶端考慮的,實際上用儲存過程等都可以防範。

資料:首先,入侵者會對乙個**確定可不可以進行注入,假設一篇文章的位址為:一般會以提交兩個位址來測試,如:

and 1=1

and 1=2

那麼,知道可以注入後入侵者可以做什麼呢?

and exists (select * from 表名 where 列名=資料)

根據返回的正確或錯誤頁面來判斷猜的表名和列名是否正確,具體實現時是先猜表名再猜列名。當猜出表名和列名之後還可以用asc和mid函式來猜出各列的資料。mid函式的格式為:mid(變數名,第幾個字元開始讀取,讀取幾個字元),比如:mid(pwd,1,2)就可以從變數pwd中的第一位開始讀取兩位的字元。asc函式的格式為:asc("字串"),如:asc("a")就可以讀出字母a的ascii碼了。那麼實際應用的時候就可以寫為:asc(mid(pwd,1,1))這樣讀取的就是pwd列的第乙個字元的ascii碼,提交: asc(mid(pwd,1,1))>97以返回的頁面是否為正確頁面來判斷pwd列的第乙個字元的ascii碼是否大於97(a的ascii碼),如果正確就再試是否小於122(z的ascii碼)……這樣慢慢縮小字元的ascii碼的範圍,猜到真實的ascii碼也只是時間的問題。一位一位的猜就可以得到資料庫中的使用者名稱和密碼了。還有一種asp驗證缺陷——就是使用者名稱和密碼都輸'or '1'='1,構造sql語句select * form 表單名 where username='' or '1'='1' and pwd='' or '1'='1'就可以達到繞過密碼驗證的目的。

說了那麼多,其實防範的方法很簡單,我們把特殊字元(如and、or、'、")都禁止提交就可以防止注入了。asp傳輸資料分為get和post兩種, get是通過將資料新增到url後提交的方式,post則是利用郵寄資訊資料字段將資料傳送到伺服器。

如何防止SQL注入式攻擊?

所謂sql注入,就是通過把sql命令插入到web表單遞交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。通過一下的例子更形象的了解sql注入 有乙個login畫面,在這個login畫面上有兩個文字框分別用來輸入使用者名稱和密碼,當使用者點了登入按鈕的時候,會對輸入的使用者...

PHP如何防止SQL注入式攻擊

由於程式開發人員對程式中的一些資料型別沒有經過檢查 向 mysql 提交正確的資料型別以及特殊資料的轉義,導致程式容易受sql注入式攻擊。就此,php對此已提供了安全的設定及內建函式來防止此問題的發生。以下就個人在開發應用中寫點.1 magic quotes runtime設定 當它開啟時,php的...

PHP如何防止SQL注入式攻擊

方法1 由於程式開發人員對程式中的一些資料型別沒有經過檢查 向 mysql 提交正確的資料型別以及特殊資料的轉義,導致程式容易受sql注入式攻擊。就此,php對此已提供了安全的設定及內建函式來防止此問題的發生。以下就個人在開發應用中寫點.1 magic quotes runtime 設定 當它開啟時...