閒話不說,直接來!
理論補充: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...