這次解決sql注入問題,是查詢之前的controller檔案中的sql注入問題,修補漏洞很重要,預防漏洞的產生也同樣重要,在使用sql語句對資料庫進行增刪改查操作的時候,要考慮到sql注入問題的出現。
首先了解一下sql注入的步驟:
(2)使用者自己構造sql語句;
(3)將sql語句傳送給資料庫管理系統(dbms);
(4)dbms接收請求,並將該請求解釋成機器**指令,執行必要的訪問操作;
(5)dbms接受返回的結果,並處理,返回給使用者;
例如:登入介面的表單資料$name(使用者名稱) 、$possword(密碼)都是通過前端頁面submit 把表單資料提交到後台,然後在後台php檔案中通過執行sql語句對所需資料進行查詢.
$sql="select * from users where username='$name' and password=ma5('.$possword.') ";
直接將使用者提交過來的資料(使用者名稱和密碼)直接拿去執行(沒有實現進行特殊字元過濾),如果使用者名稱和密碼都匹配成功的話,將跳轉到登入後的介面,不成功,則給出錯誤提示資訊。
正常情況下,$name='user',$possword='123456',執行的sql語句為:
$sql="select * from users where username='user' and password=md5('123456') ";
如果賬號密碼正確,那麼我們會正常的登入,假如賬號密碼錯誤,會給出錯誤提示。但是在有sql注入漏洞的**來說,只要構造個特殊的「字串」,照樣能夠成功登入。比如:在使用者名稱輸入框中輸入:or 1=1#,密碼隨便輸入,那麼這時sql語句為:
$sql="select * from users where username='or 1=1#' and password=md5('12345asdada6') ";
「#」在mysql中是注釋符,這樣#號後面的內容將被mysql視為注釋內容,這樣就不會去執行了。sql語句在這時變成了
$sql = select * from users where username='' or 1=1#' and password=md5('12345asdada6')";
//即為$sql = select * from users where username='' or 1=1;
這時判斷1=1 肯定為true,那麼執行者就可以隨意獲取自己想要的資料了,這就是sql注入漏洞的乙個表現。
PHP SQL注入與防禦
1.什麼是sql注入攻擊?2.php通用sql注入攻擊方式 登入介面如下 我們的測試使用者名稱及密碼 admin 123456 首先,我們使用正確的登入使用者名稱及密碼 我們通過sql注入方式跳過密碼驗證登入 通過兩次登入的sql語句,我們可以很清楚的看出差異 step 1 sql select f...
PHP SQL注入的安全規範
php注入的安全防範通過上面的過程,我們可以了解到php注入的原理和手法,當然我們也同樣可以制定出相應該的防範方法 首先是對伺服器的安全設定,前面的windows伺服器的安全設定我們已經講了,不再重複,這裡主要是php mysql的安全設定和linux主機的安全設定。對php mysql注射的防範,...
php sql 語法解析函式,非常實用
if function exists parse sql if sql 跳過以 或者 開頭的單行注釋 if preg match line 跳過以 包裹起來的單行注釋 if preg match line 多行注釋開始 if substr line,0,2 多行注釋結束 if substr line...