日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第一次团队内部比赛总结

發布時間:2024/9/30 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第一次团队内部比赛总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這周四團隊進行了一次內部比賽,學長讓我們進行對各自搭建的登陸注冊界面互相進行sql注入攻擊,毫無準備的我很快就被打穿了…,唉,無奈代碼寫太簡陋,沒有提前準備,體驗感極差hhh。。。



那么先來了解一下什么是sql注入
sql注入定義
所謂SQL注入,就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。
sql注入原理
   當用戶使用輸入內容來構造動態sql語句以訪問數據庫時,如果代碼使用存儲過程,而這些存儲過程作為包含未篩選的用戶輸入的 字符串來傳遞,會發生sql注入。在某些表單中,用戶輸入的內容直接用來構造動態sql命令,或者作為存儲過程的輸入參數,這些表單特別容易受到sql注入的攻擊。因此,沒有對用戶輸入的合法性進行判斷或者程序中本身的變量處理不當,這樣,用戶就可以提交一段數據庫查詢的代碼, 根據程序返回的結果,獲得一些敏感的信息或者控制整個服務器,于是sql注入就發生了。
  如何防護  
主要有以下幾點:
1.永遠不要信任用戶的輸入。對用戶的輸入進行校驗,可以通過正則表達式,或限制長度;對單引號和
雙"-"進行轉換等。
2.永遠不要使用動態拼裝sql,可以使用參數化的sql或者直接使用存儲過程進行數據查詢存取。
3.永遠不要使用管理員權限的數據庫連接,為每個應用使用單獨的權限有限的數據庫連接。
4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
5.應用的異常信息應該給出盡可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝
6.sql注入的檢測方法一般采取輔助軟件或網站平臺來檢測,軟件一般采用sql注入檢測工具jsky,網站平臺就有億思網站安全平臺檢測工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻擊等。

下面是我的登陸驗證代碼:

<?php$conn=mysql_connect("localhost",'root','root') or die("數據庫連接失敗!");//連接你的本地數據庫localhost為服務器 root為用戶名 root為密碼mysql_select_db('myphp',$conn) or die("您要選擇的數據庫不存在");//選擇你建立的數據庫$name=$_POST['username'];$pass=$_POST['password'];//獲取表單提交的內容用兩個變量來存post方式接受的值$sql="select * from user where username='$name' and password='$pass'";//查詢語句$query=mysql_query($sql);//函數執行一條 MySQL 查詢。$arr=mysql_fetch_array($query);然后從$query中取一行數字數組if(is_array($arr)){//對$arr進行判斷setcookie('username',$name,time()+3600);//設置cookie,時間為一小時,(以秒為單位)header("Location:index.php");//跳轉頁面}else{echo "您的用戶名或密碼輸入有誤,<a href=\"login.php\">請重新登錄!</a>";}?>

注意到了沒,我們直接將用戶提交過來的數據(用戶名和密碼)直接拿去執行,并沒有實現進行特殊字符過濾,待會你將明白,這是致命的。
  代碼分析:如果,用戶名和密碼都匹配成功的話,將跳轉到目的操作界面 index.php,不成功,則給出提示信息。
演示注入手法
接下來將展開我們的重頭戲SQL注入:
  填好正確的用戶名(123)和密碼(123)后,點擊提交,將會返回給我們“登陸成功”的界面。
  因為根據我們提交的用戶名和密碼被合成到SQL查詢語句當中之后是這樣的:

select * from users where username='123' and password='123'

很明顯,用戶名和密碼都和我們之前給出的一樣,肯定能夠成功登陸。
但是,如果我們輸入一個錯誤的用戶名或密碼呢?很明顯,肯定登入不了吧。恩,正常情況下是如此,但是對于有SQL注入漏洞的網站來說,只要構造個特殊的“字符串”,照樣能夠成功登錄。
比如在用戶名輸入框中輸入:’or 1=1#,密碼隨便輸入,這時候的合成后的SQL查詢語句為:

select * from users where username='' or 1=1#' and password=md5(' ') 語義分析:“#”在mysql中是注釋符,這樣#號后面的內容將被mysql視為注釋內容, 這樣就不會去執行了,換句話說,以下的兩句sql語句等價:select * from users where username='' or 1=1#' and password=md5(' ') 等價于 select * from users where username='' or 1=1因為1=1永遠都是成立的,即where子句總是為真,將該sql進一步簡化之后, 等價如下select語句: select * from users

沒錯,該sql語句的作用是檢索users表中的所有字段
果不其然,我們利用萬能語句(’or 1=1#)能夠登錄!看到了吧,一個經構造后的sql語句竟有如此可怕的破壞力,相信你看到這后,開始對sql注入有了一個理性的認識了吧~

總結

以上是生活随笔為你收集整理的第一次团队内部比赛总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。