簡體   English   中英

所有$ _POST的mysql_real_escape_string

[英]mysql_real_escape_string for all $_POST

我有一個舊系統,沒有任何檢查sql注入的功能,並且我想在用戶每次使用數據庫時添加mysqli_real_escape_string()

所有系統都在index.php下構建。 該頁面如下所示:

if (!isset($_GET['p'])) {
    $_GET['p'] = 'main';
}

if (!file_exists($_GET['p'].".php"))    {
    echo "The page you are looking for isn't exist.";
}   else    {   
    if (logs()) {
        include($_GET['p'].".php");
    }
    else    {
        include('not_register.php');
    }
}

我想只是在top哦index.php添加此代碼,我想確保自己不會弄亂任何東西,所以我在這里問。

foreach ($_POST as $name => $val)   {
    $_POST[$name] = mysqli_real_escape_string($db, $val);
}

這段代碼在每次重新加載頁面時都會產生負面影響嗎?

謝謝。

這個:

我想在用戶每次使用數據庫時添加mysql_real_escape_string()。

對於使用mysql_ *函數的舊版mysql代碼,這是一個好目標。 但是,這:

foreach($ _POST as $ name => $ val){$ _POST [$ name] = mysqli_real_escape_string($ db,$ val); }

是另一回事。 您並沒有將它添加到用戶每次與數據庫交互時,而是每次都添加它,然后再進行其他操作。 該函數需要與數據庫的連接,因此,如果在使用這些變量的頁面中沒有這樣的連接,則會立即遇到問題。 此外,您可以中斷對這些變量的任何處理,這些變量可能不希望此時轉義這些值-對於數據庫使用應轉義它們,因此應在將其與數據庫一起使用之前而不是在此之前進行轉義。


而且,正如其他人指出的那樣,您的代碼很容易受到包含模式的注入的影響。 file_exists可以與網絡共享,文件路徑以及某些URL包裝器一起使用。 引用file_exists手動輸入

從PHP 5.0.0開始,此功能還可以與某些URL包裝器一起使用。 請參閱支持的協議和包裝器,以確定哪些包裝器支持stat()系列功能。

即使沒有url包裝,惡意用戶也可以使用您的include直接包含某些服務器配置和您不想包含的其他文件。

第一。

循環運行此問題將無濟於事。 實際上,您只是重新發明了一個臭名昭著的魔術引號功能,該功能已從該語言中刪除。 因為某種原因。

第二。

對於使用mysql_ *函數的舊版mysql代碼而言,這不是一個好目標。 僅僅因為此功能與注入完全無關。

如果只有25頁,則只需復查它們並正確重寫SQL處理代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM