qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

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

          1.什么是SQL注入,猛戳wikipedia查看
            2.本地測試代碼:
            如果表單提交正確,就打印hello,“username”
            否則,打印“404 not found!”
          <?php
          require 'config.php';
          $DBConnection = mysql_connect ( "$dbhost", "$dbuser", "$dbpwd" );
          mysql_select_db ( "$dbdatabase" );
          if(isset($_GET['submit']) && $_GET['submit']){
          $sql="select * from test where name='".$_GET['username']."'and password='".$_GET['password']."'";
          //echo $sql;exit;
          $result=mysql_query($sql,$DBConnection);
          $num=mysql_num_rows($result);
          if($num>=1)
          {
          echo "hello,".$_GET['username'];
          }
          else {
          echo"404 not found";
          }
          }
          ?>
          <form action="login.php" method="GET">
          <table>
          <tr>
          <td>username</td>
          <td><input type="textbox" name="username"/></td>
          <td>password</td>
          <td><input type="textbox" name="password"></td>
          <td>submit</td>
          <td><input type="submit" name="submit"></td>
          </tr>
          </table>
          </form>
            3.瀏覽器界面顯示:
            4.重頭戲,sql注入:
          5.原理--為什么用戶名不正確,卻可以顯示hello?
            我可以echo一下:
          <span style="font-size:18px;">$sql="select * from test where name='".$_GET['username']."'and password='".$_GET['password']."'";
          echo $sql;exit;</span>
            顯示:
            拿到我的mysql數據庫中查詢:
            可以看到,居然能查到信息,因為sql語句中,前一半單引號被閉合,后一半單引號被 “--”給注釋掉,中間多了一個永遠成立的條件“1=1”,這就造成任何字符都能成功登錄的結果。
            6.小結:
            1)其實這個sql注入過程上很簡單,困難的地方在于提交SQL注入語句的靈活性上面,單引號的使用很關鍵,另外,多用echo打印調試也很值得一試~~
            2)GET方式提交表單很危險,所以還是用POST方式吧!
            參考:http://blog.csdn.net/gideal_wang/article/details/4316691
            3)防止SQL注入:可以看出,sql注入就是用戶提交一些非法的字符(如本文的單引號’和sql語句的注釋號--,還有反斜杠\等),所以要用轉義:  htmlspecialchars函數,mysql_read_escape_string函數都可以實現。
            4)JS段驗證表單了,JSP/PHP等后臺還要驗證碼?
            ---需要,因為friebug可以禁用JS...
            --------------------------------------------------------------------------
            update:
            上面的方法,當password通過md5加密的話,就無法實現注入了,那么就在username上做手腳:
            username后面的內容就都被注釋掉了。哈哈~

          posted on 2014-01-29 10:49 順其自然EVO 閱讀(321) 評論(0)  編輯  收藏 所屬分類: 數據庫

          <2014年1月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阜宁县| 英山县| 福泉市| 东兰县| 西峡县| 邵阳市| 长垣县| 千阳县| 康平县| 靖西县| 青铜峡市| 望江县| 墨江| 卓资县| 四平市| 康保县| 丰台区| 修文县| 舟曲县| 军事| 区。| 凤山市| 从化市| 自贡市| 平湖市| 浪卡子县| 类乌齐县| 鹤岗市| 南丹县| 元江| 南靖县| 宁河县| 德兴市| 阿克陶县| 阳春市| 临夏县| 阜城县| 信阳市| 仪陇县| 敦煌市| 维西|