qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 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數(shù)據(jù)庫中查詢:
            可以看到,居然能查到信息,因?yàn)閟ql語句中,前一半單引號被閉合,后一半單引號被 “--”給注釋掉,中間多了一個(gè)永遠(yuǎn)成立的條件“1=1”,這就造成任何字符都能成功登錄的結(jié)果。
            6.小結(jié):
            1)其實(shí)這個(gè)sql注入過程上很簡單,困難的地方在于提交SQL注入語句的靈活性上面,單引號的使用很關(guān)鍵,另外,多用echo打印調(diào)試也很值得一試~~
            2)GET方式提交表單很危險(xiǎn),所以還是用POST方式吧!
            參考:http://blog.csdn.net/gideal_wang/article/details/4316691
            3)防止SQL注入:可以看出,sql注入就是用戶提交一些非法的字符(如本文的單引號’和sql語句的注釋號--,還有反斜杠\等),所以要用轉(zhuǎn)義:  htmlspecialchars函數(shù),mysql_read_escape_string函數(shù)都可以實(shí)現(xiàn)。
            4)JS段驗(yàn)證表單了,JSP/PHP等后臺(tái)還要驗(yàn)證碼?
            ---需要,因?yàn)閒riebug可以禁用JS...
            --------------------------------------------------------------------------
            update:
            上面的方法,當(dāng)password通過md5加密的話,就無法實(shí)現(xiàn)注入了,那么就在username上做手腳:
            username后面的內(nèi)容就都被注釋掉了。哈哈~

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

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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 定结县| 喀什市| 万安县| 仁怀市| 田阳县| 霍州市| 张家界市| 上虞市| 通海县| 彰化县| 曲阜市| 广州市| 昌邑市| 桦南县| 民县| 田东县| 义乌市| 阜新| 壤塘县| 蒙城县| 南皮县| 合江县| 龙岩市| 安康市| 克山县| 儋州市| 双鸭山市| 海南省| 通州区| 山阳县| 石台县| 柳州市| 玉屏| 灵丘县| 修水县| 崇义县| 青冈县| 扬州市| 乌拉特后旗| 小金县| 咸丰县|