怎樣判斷有沒有SQL注入漏洞及原理?

來源:實驗樓php

最爲經典的單引號判斷法: 在參數後面加上單引號,好比:spa

http://xxx/abc.php?id=1' 

若是頁面返回錯誤,則存在 Sql 注入。 緣由是不管字符型仍是整型都會由於單引號個數不匹配而報錯。code

一般 Sql 注入漏洞分爲 2 種類型:字符串

  • 數字型
  • 字符型

數字型判斷:

當輸入的參 x整型時,一般 abc.php 中 Sql 語句類型大體以下: select * from <表名> where id = x 這種類型可使用經典的 and 1=1 和 and 1=2 來判斷:string

    1. Url 地址中輸入 http://xxx/abc.php?id= x and 1=1 頁面依舊運行正常,繼續進行下一步。
    1. Url 地址中繼續輸入 http://xxx/abc.php?id= x and 1=2 頁面運行錯誤,則說明此 Sql 注入爲數字型注入。

緣由以下: 當輸入 and 1=1時,後臺執行 Sql 語句:class

select * from <表名> where id = x and 1=1 

沒有語法錯誤且邏輯判斷爲正確,因此返回正常。後臺

當輸入 and 1=2時,後臺執行 Sql 語句:select

select * from <表名> where id = x and 1=2 

沒有語法錯誤可是邏輯判斷爲假,因此返回錯誤。 咱們再使用假設法:若是這是字符型注入的話,咱們輸入以上語句以後應該出現以下狀況:語法

select * from <表名> where id = 'x and 1=1' select * from <表名> where id = 'x and 1=2' 

查詢語句將 and 語句所有轉換爲了字符串,並無進行 and 的邏輯判斷,因此不會出現以上結果,故假設是不成立的。查詢

字符型判斷:

當輸入的參 x 爲字符型時,一般 abc.php 中 SQL 語句類型大體以下: select * from <表名> where id = 'x' 這種類型咱們一樣可使用 and '1'='1 和 and '1'='2來判斷:

    1. Url 地址中輸入 http://xxx/abc.php?id= x' and '1'='1 頁面運行正常,繼續進行下一步。
    1. Url 地址中繼續輸入 http://xxx/abc.php?id= x' and '1'='2 頁面運行錯誤,則說明此 Sql 注入爲字符型注入。同理
相關文章
相關標籤/搜索