2011-12-02 51 views
4

我不得不在舊開發人員離開的舊Web應用程序上工作。它使用addslashes()來阻止HTTML屬性上的XSS。addslashes()是否安全以阻止HTML屬性中的XSS?

下面是一個例子:

<?php 
    // all $_POST vars are put through addslashes() 

    echo "<input type='hidden' value='" . $_POST['id'] . "' />"; 
?> 

這是容易被XSS?有沒有什麼方法的JavaScript可以運行在一個值屬性,就像它可以在src屬性中,例如,src ='javascript:alert(99)'。或者可以將value屬性分解出來,然後插入腳本標記?

編輯:感謝昆汀,我認爲它是脆弱的。

回答

8

是和addslashes()的安全,以防止XSS的HTML屬性?

這是非常無效的。

這是脆弱的XSS?

是的。

是否有任何方式的JavaScript可以以值屬性喜歡它可以在例如一個src屬性運行,SRC =「JavaScript的:警報(99)」。

沒有

,或者可以value屬性被打破了,然後腳本標記可以被插入?

該數據只需包括一個"並且屬性被打破。

使用htmlspecialchars當你想插入任意字符串到一個屬性值。

+0

使用雙引號或單引號不會突破,它只是逃脫。它真的很容易受到XSS? – MrCode

+2

@ user995579 - 它不會被轉義。它之前只有一個斜線。這沒有任何意義,然後把它放在HTML之前。 – Quentin

+0

是的,它在它之前放了一個斜線。這是保持所有用戶輸入的值屬性,所以我不認爲它可以被打破。 – MrCode

3

addslashes()不適用於此任務。使用htmlspecialchars()htmlentities()代替,如

<input type="hidden" 
     value="<?php echo htmlspecialchars($_POST['id'], ENT_QUOTES, 'UTF-8') ?>">