」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 `mysql_real_escape_string()` 和 `mysql_escape_string()` 足以保護您的應用程式嗎?

使用 `mysql_real_escape_string()` 和 `mysql_escape_string()` 足以保護您的應用程式嗎?

發佈於2024-12-22
瀏覽:912

Is Using `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Secure Your Application?

mysql_real_escape_string() 和 mysql_escape_string() 足以確保應用程式安全嗎?

雖然這些函數可以提供一些針對 SQL 注入和其他攻擊的保護,但他們未能解決某些漏洞。

SQL如果您在查詢中不正確地處理 PHP 變量,注入

Mysql_real_escape_string() 仍然可以將您的應用程式暴露於 SQL 注入。考慮以下範例:

$sql = "SELECT number FROM PhoneNumbers WHERE " . 
        mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);  

攻擊者可以操縱此查詢來執行未經授權的 SQL 語句,因為 mysql_real_escape_string() 並非旨在保​​護表名、列名或 LIMIT 欄位。

類似攻擊

Mysql_real_escape_string() 不足以防止 LIKE 漏洞。攻擊者可以輸入「%%」等惡意值來傳回所有記錄,從而可能洩露敏感資訊。

字元集漏洞

某些瀏覽器可能容易受到字元集的攻擊漏洞利用,允許攻擊者註入繞過轉義機制的惡意字元並執行任意SQL 指令。

準備語句:A綜合解決方案

為了有效保護您的應用程序,建議使用準備好的語句而不是 mysql_real_escape_string()。準備好的語句透過將使用者提供的值綁定為參數來執行 SQL 查詢。這消除了手動轉義的需要,並確保只執行授權的 SQL。

以下是在 PHP 中使用準備好的語句的範例:

$pdo = new PDO($dsn);

$column = 'url';
$value = 'http://www.example.com/';
$limit = 1;

// Validate the search parameter column.
$validColumns = array('url', 'last_fetched');
if (!in_array($column, $validColumns)) { $column = 'id'; }

$statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' .
                           'WHERE ' . $column . '=? ' .
                           'LIMIT ' . intval($limit));
$statement->execute(array($value));
while (($data = $statement->fetch())) { }

Prepared statements 透過利用底層資料庫伺服器的安全功能提供主動防禦機制。它們本質上能夠抵抗已知和未知的攻擊,從而確保資料的完整性。

最新教學 更多>
  • 如何從 Matplotlib 圖中刪除科學記數法和偏移量?
    如何從 Matplotlib 圖中刪除科學記數法和偏移量?
    從Matplotlib 圖中刪除科學記數法您有一個帶有科學記數法和軸偏移量的圖,並且您想要消除它們。 停用偏移偏移量與科學記數法分開,並加入軸上顯示的數字。要停用它,請使用:plt.ticklabel_format(useOffset=False)停用科學記數法要阻止科學記數法,請使用: ]plt....
    程式設計 發佈於2024-12-22
  • HTML 格式標籤
    HTML 格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2024-12-22
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-12-22
  • 如何在 Java 中將位元組數組轉換為字串並返回位元組數組?
    如何在 Java 中將位元組數組轉換為字串並返回位元組數組?
    Java 中位元組數組轉字串並傳回位元組數組假設您有一個初始byte[] 數組,需要將其轉換為字串表示形式。隨後,您想要將該字串轉換回 byte[] 陣列。這種轉換對於各種場景下的資料傳輸和處理至關重要。 要將 byte[] 陣列轉換為字串,可以使用 Arrays.toString() 方法。此方法...
    程式設計 發佈於2024-12-22
  • Go 切片的最大長度是多少?
    Go 切片的最大長度是多少?
    Go 中切片的最大長度Go 中的切片是動態大小的、靈活的數組視圖。它表示底層數組的連續段。那麼問題來了,切片的最大長度是多少? 根據 Go 文檔,切片索引是透過整數來管理的。因此,切片的最大容量受到目標建置上預設整數大小的限制。 但是,由於記憶體限制,該理論限制可能並不總是可實現。如果您嘗試建立大小...
    程式設計 發佈於2024-12-22
  • 為什麼 Go 1.8 更新後 `go version` 還是顯示舊版?
    為什麼 Go 1.8 更新後 `go version` 還是顯示舊版?
    Go 版本差異問題排查更新至 Go 1.8 後,使用者可能會遇到 go version 指令仍顯示舊版的問題。儘管安裝成功、更新終端會話並重新啟動計算機,版本號仍保持不變。 要解決此問題,建議使用者檢查其 .bashrc 檔案。該檔案中的特定路徑配置可能是罪魁禍首,導致終端機顯示不正確的版本,而其他...
    程式設計 發佈於2024-12-22
  • 為什麼原型化為陣列的 JavaScript 物件成員在類別實例之間共用?
    為什麼原型化為陣列的 JavaScript 物件成員在類別實例之間共用?
    原型化為陣列的JavaScript 物件成員:跨類別實例共享在JavaScript 中對陣列進行原型設計時,了解這些成員是共享的至關重要在所有類別實例中。如果您習慣了私有物件成員,這種行為可能看起來違反直覺。 行為解釋JavaScript的原型機制允許物件從父物件繼承屬性和方法,稱為原型。當您將陣列...
    程式設計 發佈於2024-12-22
  • 我的防毒軟體是否導致 Chrome 中出現「net::ERR_INCOMPLETE_CHUNKED_ENCODING」錯誤?
    我的防毒軟體是否導致 Chrome 中出現「net::ERR_INCOMPLETE_CHUNKED_ENCODING」錯誤?
    Chrome 問題:解決net::ERR_INCOMPLETE_CHUNKED_ENCODING 錯誤「net::ERR_INCOMPLETE_CHUNKED_EN」不完整串流。雖然這個問題在過去兩個月中一直存在於孤立的 Apache 伺服器上,沒有影響其他使用者或團隊成員,但已經實施了強制使用 H...
    程式設計 發佈於2024-12-22
  • Node.js 入門專案包括 GraphQL、Redis、JWT 和 Sequelize
    Node.js 入門專案包括 GraphQL、Redis、JWT 和 Sequelize
    此模板提供了一个 Node.js 入门项目,已配置 GraphQL 用于 API,Redis 用于缓存和临时数据存储,JWT 用于身份验证和授权,Sequelize 用于 ORM连接到关系数据库,例如 PostgreSQL 或 MySQL。该项目具有模块化结构,可让您立即开发具有集成和可扩展功能的现...
    程式設計 發佈於2024-12-22
  • 如何使用自訂選項從命令列高效匯出和匯入 MySQL 資料庫?
    如何使用自訂選項從命令列高效匯出和匯入 MySQL 資料庫?
    透過自訂從命令列匯出並匯入.sql 檔案透過指令列匯出並匯入.sql 檔案是一種便捷的管理方式MySQL 資料庫。此功能為匯出和匯入過程中的特定要求提供了靈活性和支援。 用於匯出資料的MySQLdump:要匯出資料庫,請使用mysqldump 指令:mysqldump -u [username] -...
    程式設計 發佈於2024-12-22
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-22
  • 如何在 PHP 中將帶有逗號小數點的數字轉換為浮點數?
    如何在 PHP 中將帶有逗號小數點的數字轉換為浮點數?
    將逗號小數點的數字轉換為浮點數在某些情況下,您可能會遇到使用逗號作為小數點的數字數據,且一個點作為千位分隔符號。雖然常見的數位格式化函數可能無法處理這種格式,但有一個簡單有效的解決方案:使用str_replace() 來改革數位str_replace( ) 函數可用來替換字串中的字元。在這種情況下,...
    程式設計 發佈於2024-12-22
  • 如何使用狀態在 React Native 中顯示和隱藏元素?
    如何使用狀態在 React Native 中顯示和隱藏元素?
    使用 React Native 顯示和隱藏元素React 提供了多種方法來操縱頁面上元素的可見性。常見的方法是使用內聯樣式來設定顯示屬性。然而,這種方法需要內聯樣式,這可能會很不方便,並且會降低程式碼的可讀性。 更優雅的解決方案是使用 React State API。 State API 可讓您定義...
    程式設計 發佈於2024-12-22
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-12-22
  • 如何在 MySQL 中將包含數字的 VARCHAR 欄位作為數字進行排序?
    如何在 MySQL 中將包含數字的 VARCHAR 欄位作為數字進行排序?
    變相數字:在 MySQL 中將 Varchar 排序為數字處理結構化資料時,通常需要對數值進行操作。但是,有時由於各種原因,資料會儲存為字串(VARCHAR)。當嘗試執行數學運算或排序時,這可能會帶來挑戰,因為字串本質上並不是數字。 在這種情況下,出現了問題:我們如何對包含數字的VARCHAR 列進...
    程式設計 發佈於2024-12-22

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3