<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • PHP阻止SQL注入式攻擊的方法

    時間:2024-06-22 16:31:18 SQL 我要投稿
    • 相關推薦

    PHP阻止SQL注入式攻擊的方法

      【提要】本篇《PHP阻止SQL注入式攻擊的方法》特別為需要方法編程學習的朋友收集整理的,僅供參考。內容如下:

      PHP是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利于學習,使用廣泛,主要適用于Web開發領域。以下是小編為大家搜索整理的PHP阻止SQL注入式攻擊的方法 

      一、 注入式攻擊的類型

      可能存在許多不同類型的攻擊動機,但是乍看上去,似乎存在更多的類型。這是非常真實的-如果惡意用戶發現了一個能夠執行多個查詢的辦法的話。

      如果你的腳本正在執行一個SELECT指令,那么,攻擊者可以強迫顯示一個表格中的每一行記錄-通過把一個例如"1=1"這樣的條件注入到WHERE子句中,如下所示(其中,注入部分以粗體顯示):

      SELECT * FROM wines WHERE variety = lagrein OR 1=1;

      正如我們在前面所討論的,這本身可能是很有用的信息,因為它揭示了該表格的一般結構(這是一條普通的記錄所不能實現的),以及潛在地顯示包含機密信息的記錄。

      一條更新指令潛在地具有更直接的威脅。通過把其它屬性放到SET子句中,一名攻擊者可以修改當前被更新的記錄中的任何字段,例如下面的例子(其中,注入部分以粗體顯示):

      UPDATE wines SET type=red,vintage=9999 WHERE variety = lagrein

      通過把一個例如1=1這樣的恒真條件添加到一條更新指令的WHERE子句中,這種修改范圍可以擴展到每一條記錄,例如下面的例子(其中,注入部分以粗體顯示):

      UPDATE wines SET type=red,vintage=9999 WHERE variety = lagrein OR 1=1;

      最危險的指令可能是DELETE-這是不難想像的。其注入技術與我們已經看到的相同-通過修改WHERE子句來擴展受影響的記錄的范圍,例如下面的例子(其中,注入部分以粗體顯示):

      DELETE FROM wines WHERE variety = lagrein OR 1=1;

      二、 多個查詢注入

      多個查詢注入將會加劇一個攻擊者可能引起的潛在的損壞-通過允許多條破壞性指令包括在一個查詢中。在使用MySQL數據庫時,攻擊者通過把一個出乎意料之外的終止符插入到查詢中即可很容易實現這一點-此時一個注入的引號(單引號或雙引號)標記期望變量的結尾;然后使用一個分號終止該指令。現在,一個另外的攻擊指令可能被添加到現在終止的原始指令的結尾。最終的破壞性查詢可能看起來如下所示:

      SELECT * FROM wines WHERE variety = lagrein;GRANT ALL ON *.* TO BadGuy@% IDENTIFIED BY gotcha;

      這個注入將創建一個新的用戶BadGuy并賦予其網絡特權(在所有的表格上具有所有的特權);其中,還有一個"不祥"的口令被加入到這個簡單的 SELECT語句中。

          如果你遵循我們在以前文章中的建議-嚴格限制該過程用戶的特權,那么,這應該無法工作,因為Web服務器守護程序不再擁有你撤回的 GRANT特權。但是從理論上講,這樣的一個攻擊可能給予BadGuy自由權力來實現他對你的數據庫的任何操作。

      至于這樣的一個多查詢是否會被MySQL服務器處理,結論并不唯一。這其中的一些原因可能是由于不同版本的MySQL所致,但是大多數情況卻是由于多查詢存在的方式所致。 

           MySQL的監視程序完全允許這樣的一個查詢。常用的MySQL GUI-phpMyAdmin,在最終查詢之前會復制出以前所有的內容,并且僅僅這樣做。

      但是,大多數的在一個注入上下文中的多查詢都是由PHP的mysql擴展負責管理的。幸好,默認情況下,它是不允許在一個查詢中執行多個指令的;試圖執行兩個指令(例如上面所示的注入)將會簡單地導致失敗-不設置任何錯誤,并且沒有生成任何輸出信息。在這種情況下,盡管PHP也只是"規規矩矩"地實現其缺省行為,但是確實能夠保護你免于大多數簡單的注入式攻擊。

      PHP5中的新的mysqli擴展(參考http://php.net/mysqli),就象mysql一樣,內在地也不支持多個查詢,不過卻提供了一個mysqli_multi_query()函數以支持你實現多查詢-如果你確實想這樣做的話。

      然而,對于SQLite-與PHP5綁定到一起的可嵌入的SQL數據庫引擎(參考http://sqlite.org/和http: //php.net/sqlite)情況更為可怕,由于其易于使用而吸引了大量用戶的關注。

           在有些情況下,SQLite缺省地允許這樣的多指令查詢,因為該數據庫可以優化批查詢,特別是非常有效的批INSERT語句處理。然而,如果查詢的結果為你的腳本所使用的話(例如在使用一個SELECT語句檢索記錄的情況下),sqlite_query()函數卻不會允許執行多個查詢

    【PHP阻止SQL注入式攻擊的方法】相關文章:

    PHP防止SQL注入的例子09-25

    PHP對象注入的實例分析08-27

    PHP錯誤類型及屏蔽方法08-22

    用SQLSERVER查詢正在實行的SQL的方法08-31

    Sql Server、Access數據排名的實現方法07-09

    MySQL導出導入SQL文件命令方法10-17

    PHP處理密碼的幾種方法10-17

    十天學會php的方法09-23

    MongoDB的PHP驅動方法與技巧大全09-08

    了解PHP環境搭建與配置的方法08-03

    主站蜘蛛池模板: 熟女精品视频一区二区三区 | 久久综合久久自在自线精品自| 国产精品 一区 在线| 亚洲国产精品18久久久久久| 国产成人精品午夜福麻豆| 国产精品揄拍100视频| 午夜精品久久久内射近拍高清| 亚洲人午夜射精精品日韩| 国产99久久九九精品无码| 98视频精品全部国产| 自拍偷自拍亚洲精品被多人伦好爽| 成人精品视频99在线观看免费| 尤物国产在线精品福利一区| 精品久久久无码人妻中文字幕豆芽| 99精品国产自在现线观看| 亚洲欧美精品AAAAAA片| 国产午夜精品久久久久九九电影 | 北条麻妃国产九九九精品视频| 精品中文高清欧美| 国产在线精品网址你懂的| 精品人无码一区二区三区| 中文字幕日韩精品在线| 免费精品精品国产欧美在线| 国产精品欧美久久久久天天影视| 亚洲Av无码精品色午夜| 天天视频国产精品| 久久成人国产精品一区二区| 国产精品亚洲玖玖玖在线观看 | 92国产精品午夜福利免费| 国产精品无码一区二区三级| 亚洲欧洲成人精品香蕉网| 亚欧洲精品在线视频免费观看| 成人国产精品高清在线观看| 国产精品9999久久久久| 国产精品成人A区在线观看| 精品熟女少妇av免费久久| 亚洲欧美日韩久久精品第一区| 国产精品1024视频| 99爱在线视频这里只有精品 | 中文字幕日韩精品在线| 伊人久久精品无码av一区|