addslashes 及 其他 清除空格的方法是不安全的

来源:http://www.cnblogs.com/shouce/archive/2016/02/15/5189876.html
-Advertisement-
Play Games

清除空格的方法是不安全的,部分原因是因為字元中的空格非常多,例如 "addslashes的問題在 於黑客 可以用0xbf27來代替單引號,而addslashes只是將0xbf27修改為0xbf5c27,成為一個有效的多位元組字元,其中的0xbf5c仍會 被看作是單引號,所以addslashes無法成功


清除空格的方法是不安全的,部分原因是因為字元中的空格非常多,例如 "addslashes的問題在 於黑客 可以用0xbf27來代替單引號,而addslashes只是將0xbf27修改為0xbf5c27,成為一個有效的多位元組字元,其中的0xbf5c仍會 被看作是單引號,所以addslashes無法成功攔截。"

最好是按照具體的參數需求校驗確定是 int 等不是,外加資料庫的參數操作方法.其實這個是資料庫的 sql 問題,應該從源頭資料庫本身來解決,只不過有些資料庫滑提供相應的方法罷了.

--------------------------------------------------

    PHP幾個防SQL註入攻擊自帶函數區別
    2010-12-24 13:09:22  

    SQL註入攻擊是黑客攻擊網站最常用的手段。如果你的站點沒有使用嚴格的用戶輸入檢驗,那麼常容易遭到SQL註入攻擊。SQL註入攻擊通常通過給站點資料庫提交不良的數據或查詢語句來實現,很可能使資料庫中的紀錄遭到暴露,更改或被刪除。

    為了防止SQL註入攻擊,PHP自帶一個功能可以對輸入的字元串進行處理,可以在較底層對輸入進行安全上的初步處理,也即Magic Quotes。(php.ini magic_quotes_gpc)。如果magic_quotes_gpc選項啟用,那麼輸入的字元串中的單引號,雙引號和其它一些字元前將會被自動加 上反斜杠。

    但Magic Quotes並不是一個很通用的解決方案,沒能屏蔽所有有潛在危險的字元,並且在許多伺服器上Magic Quotes並沒有被啟用。所以,我們還需要使用其它多種方法來防止SQL註入。

    許 多資料庫本身就提供這種輸入數據處理功能。例如PHP的MySQL操作函數中有addslashes()、 mysql_real_escape_string()、mysql_escape_string()等函數,可將特殊字元和可能引起資料庫操作出錯的字 符轉義。那麼這三個功能函數之間有什麼卻別呢?下麵我們就來詳細講述下。

    雖然國內很多PHP程式員仍在依靠addslashes防止SQL註入,還是建議大家加強中文防止SQL註入的檢查。addslashes的問題在 於黑客 可以用0xbf27來代替單引號,而addslashes只是將0xbf27修改為0xbf5c27,成為一個有效的多位元組字元,其中的0xbf5c仍會 被看作是單引號,所以addslashes無法成功攔截。

    當然addslashes也不是毫無用處,它是用於單位元組字元串的處理,多位元組字元還是用mysql_real_escape_string吧。

    另外對於php手冊中get_magic_quotes_gpc的舉例:
    if (!get_magic_quotes_gpc()) {
    $lastname = addslashes($_POST[‘lastname’]);
    } else {
    $lastname = $_POST[‘lastname’];
    }
    最好對magic_quotes_gpc已經開放的情況下,還是對$_POST[’lastname’]進行檢查一下。

    再說下mysql_real_escape_string和mysql_escape_string這2個函數的區別:
    mysql_real_escape_string 必須在(PHP 4 >= 4.3.0, PHP 5)的情況下才能使用。否則只能用 mysql_escape_string ,兩者的區別是:mysql_real_escape_string 考慮到連接的當前字元集,而mysql_escape_string 不考慮。

    總結一下:

    * addslashes() 是強行加;
    * mysql_real_escape_string() 會判斷字元集,但是對PHP版本有要求;
    * mysql_escape_string不考慮連接的當前字元集。

    dz中的防止sql註入就是用addslashes這個函數,同時在dthmlspecialchars這個函數中有進行一些替換$string = preg_replace(/&((#(d{3,5}|x[a-fA-F0-9]{4}));)/, &\1,這個替換解決了註入的問題,同時也解決了中文亂碼的一些問題


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 自己寫的記錄日誌,定期刪除日誌的方法。 方法比較簡單,記錄一下吧。 /// <summary> /// 寫日誌 /// </summary> /// <param name="strMsg">內容</param> /// <param name="strPath">路徑(相對hycom下的文件夾路徑
  • 出處:http://www.cnblogs.com/_popc 外話: 有關web前端優化的博文,博客園中有許多網友的博客中都有介紹,而且詳細、精準。樓主打算寫這個博客,算是對自己一年工作來的一個總結和積累有些知識從別的地方拷貝過來的,但是都審查過。 引言: 1. 慢的頁面可能會網站失去更多的用戶.
  • 背景 前幾天有同事問到我一個簡單的功能, 就是當你使用枚舉時如何給每個一元素增加描述字元串並且可以很容易的讀取出來. 比如有一個枚舉類型是列出對一個問題給出的選項(例如: 同意?不同意?中立?): public enum AssessmentAnswer { Strongly_Disagree =
  • 前言 現在,經驗證的 DreamSpark 學生無需承擔任何責任即可免費獲取 Microsoft Azure for DreamSpark,且沒有時間限制和意外費用。如果需要,您隨後可升級獲取更多服務,但您現在即可藉助背後 Microsoft 雲的強大功能托管您的 Web 應用和網站,且無需花費任何
  • 信號的概念 信號(signal)-- 進程之間通訊的方式,是一種軟體中斷。一個進程一旦接收到信號就會打斷原來的程式執行流程來處理信號。 幾個常用信號: SIGINT 終止進程 中斷進程 (control+c) SIGTERM 終止進程 軟體終止信號 SIGKILL 終止進程 殺死進程 SIGALRM
  • 別人的項目,剛用MyEclipse載入進來,一大堆錯誤(見怪不怪了) JSP報錯,上圖: 報錯:“The method getContextPath() from the type HttpServletRequest refers to the missing type String” 解決方式:
  • 又一個milestone即將結束,有了些許的時間總結研發過程中的點滴心得,今天總結下如何在編寫python代碼時對非同步操作進行同步化模擬,從而提高代碼的可讀性和可擴展性。 游戲引擎一般都採用分散式框架,通過一定的策略來均衡伺服器集群的資源負載,從而保證伺服器運算的高併發性和CPU高利用率,最終提高游
  • 事件模型是被廣泛使用的好東西,但是C++標準庫里沒有現成的,其他實現又複雜或者不優雅,比如需要使用巨集。現在VC11可以用在XP下了,那麼就痛快的拿起C++11提供的先進設施組合出一個輕便的實現吧。 為了達到簡潔的目的,需要放棄一些特性: 1、不支持判斷函數是否已經綁定過(因為std::functio
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...