手把手叫你SQL注入攻防(PHP語法)

2022-08-28 08:48:08 字數 1770 閱讀 6210

閒話不說,直接來!

理論補充:1.

2.1.什麼是sql注入,猛戳wikipedia檢視

2.本地測試**:

如果表單提交正確,就列印hello,「username」

否則,列印「404 not found!」

[php]view plain

copy

<?php    

require 'config.php';  

$dbconnection = mysql_connect ( "$dbhost", "$dbuser", "$dbpwd" );  

mysql_select_db ( "$dbdatabase" );  

if(isset($_get['submit']) && $_get['submit'])  

else   

}  ?>  

3.瀏覽器介面顯示:

4.重頭戲,sql注入:

5.原理--為什麼使用者名稱不正確,卻可以顯示hello?

我可以echo一下:

[php]view plain

copy

"font-size:18px;">$sql="select * from test where name='".$_get['username']."'and password='".$_get['password']."'";  

echo $sql;exit;

顯示:

拿到我的mysql資料庫中查詢:

可以看到,居然能查到資訊,因為sql語句中,前一半單引號被閉合,後一半單引號被 「--」給注釋掉,中間多了乙個永遠成立的條件「1=1」,這就造成任何字元都能成功登入的結果。

6.小結:

1)其實這個sql注入過程上很簡單,困難的地方在於提交sql注入語句的靈活性上面,單引號的使用很關鍵,另外,多用echo列印除錯也很值得一試~~

2)get方式提交表單很危險,所以還是用post方式吧!

參考:3)防止sql注入:可以看出,sql注入就是使用者提交一些非法的字元(如本文的單引號』和sql語句的注釋號--,還有反斜槓\等),所以要用轉義:  htmlspecialchars函式,mysql_read_escape_string函式都可以實現。

4)js段驗證表單了,jsp/php等後台還要驗證碼?

---需要,因為friebug可以禁用js...

update:

上面的方法,當password通過md5加密的話,就無法實現注入了,那麼就在username上做手腳:

username後面的內容就都被注釋掉了。哈哈~

參考:by wusuopubupt

Thinkphp手把手練習

準備條件 thinkphp框架 1.在apache的www目錄下新建資料夾,命名為thinkphp,可以將thinkphp框架放在該目錄中。確定應用名稱 確定應用路徑 開啟除錯模式 應用核心檔案,這裡根據thinkphp的路徑決定,此處用的是相對路徑 require thinkphp thinkph...

手把手搭建vps FQ

廢話不多說了,直接上手幹起來 一 vps選擇及購買 樓主選擇的是搬瓦工,網上口碑還是很不錯的,而且 也較便宜。購買 已被牆。可訪問國內備用 購買方案 如果只是個人用推薦購買 19.99 year,有時可能會斷貨。且現在支援支付寶購買。配置如下 關於架構和線路選擇樓主不是很熟悉,等日後會了更新 購買流...

python 詞云手把手 手把手教你生成炫酷的詞云

前言 話說,在這個大資料時代,獲取資訊顯得極為容易,可正是如此,我們想要對資訊進行直觀地了解難度就大了。excel是乙個很好的資料視覺化方法,不過有時候我們的資料 可能並不是一張或者多張excel 這樣子的話如果我們想利用excel進行資料視覺化就顯得不是那麼容易。首先我們需要逐個將資料匯入到exc...