2011-12-02 124 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') ?>">