php
  • css
  • tags
  • xss
  • 2017-01-17 60 views 0 likes 
    0

    人可以幫我加入用htmlspecialchars防止XSS在此代碼:用htmlspecialchars在PHP

    <?PHP 
        if(isset($_POST['update'])) { 
         $ts=$_POST['ts']; 
         $user=$_POST['user']; 
    
         mysql_query("UPDATE users SET block_newfriends='". mysql_real_escape_string($ts). "' WHERE username='" .mysql_real_escape_string($user) . "'"); 
         echo '<div class="rounded-container">'; 
         echo '<div class="rounded-green rounded-done">'; 
         echo '<b>reload</b><br>'; 
         echo '</div>'; 
         echo '</div>'; 
        } 
    ?> 
    

    我不知道往哪裏放他們,這應該是在開機自檢功能吧?

    +0

    XSS預防措施通常發生在未輸入的信息輸出上。但是,如果你想確保這兩個post值在輸入到數據庫時沒有html chars,你可以通過htmlspecialchars傳遞它們。 – MarkSkayff

    +0

    是啊我想要做那個標記,但是你知道我怎樣才能將它們添加到我的腳本中嗎?我不確定把它們放在哪裏。 – IbraDigga

    +0

    $ ts = htmlspecialchars($ _ POST ['ts']);並且對於用戶變量相同。 – MarkSkayff

    回答

    0

    與替換$ TS和$用戶線:

    $ts=htmlspecialchars($_POST['ts']); 
    $user=htmlspecialchars($_POST['user']); 
    

    然後獨自離開了查詢,那麼它會在剝離價值的htmlspecialchars使用mysql_real_escape_string()

    +0

    謝謝帕特里克,我已經取代了兩條線。我應該在這個腳本中添加更多內容還是足夠了? – IbraDigga

    +0

    這是壞建議。您將HTML轉義爲您放入數據庫的值,然後,當您將其從數據庫中取出時,您不確定屏幕輸出(回顯)函數是否需要轉義。始終將「原始」值保存在內存中,並在輸出/插入到數據庫等時進行轉換,然後不會感到困惑。 – Robbie

    +0

    所以你不同意帕特里克? – IbraDigga

    0

    你需要使它安全使用取決於你想要做什麼不同的功能:

    當輸出到HTML,使其「HTML安全」在htmlspecialchars包裝。

    echo 'Writing to browser ' . htmlspecialchars($_POST['t']); 
    

    當您輸出到SQL時,通過將其轉義爲sql來使其成爲「sql安全」(請參閱​​下面的註釋)。

    $sql = 'UPDATE table SET field="' . mysql_escape_string($_POST['t']); 
    

    當您輸出到一個URL時,通過轉義爲url來使其成爲「網址安全」。

    $link = 'http:/example.com?value=' . urlencode($_POST['t']) 
    

    類似的規則適用於JSON編碼,輸出到XML等


    注意MySQL的:你是正確的逃跑,但你使用的是PHP中不再存在的功能(你因此使用PHP的舊版本)。請在手冊中檢查mysqlipdo,然後使用這些功能。

    +0

    感謝羅比,我知道這是一箇舊的,但我目前的主機使用舊版本,我會盡快更新!我改變了兩個變量,你認爲這足夠嗎? – IbraDigga

    +1

    mysqli和PDO已經存在了10年以上;即使任何主機上的「舊」版本的PHP都應該擁有它們。他們不會在一兩年內擁有mysql()。所以現在轉換,以免你學習一個無效的課程。 – Robbie

    +0

    另請參閱我對Patrick的回答的評論:如果您將html轉義並插入數據庫,您可能會失去跟蹤哪些值已被轉義以及哪些值沒有轉義。因此,在輸入/插入數據庫時​​,保留「原始」值並進行轉義/轉換;那麼你遵循一個總是逃避輸出的簡單規則,而不需要有選擇地去做。當您稍微使用模板引擎時,它也會使轉換更容易。 – Robbie

    相關問題