如何清理javascript中使用的参数?

时间:2016-01-06 08:57:01

标签: javascript php xss

我有以下php代码:

<?php $redirect_lp = $_GET['lp']; ?>
<script>
    setTimeout(function(){
        window.location.href = "<?php echo $redirect_lp; ?>";
    }, 10)
</script>

如何清理$redirect_lp

我知道这个代码很糟糕,因为这次攻击:

http://example.com/index.php?lp= “ - 警报(” XSS \ n \ n “个%2bdocument.domain) - ”

为了防止这种特殊的攻击,我对"

进行了抨击
$redirect_lp = str_replace("\"", "", $redirect_lp);

这够了吗?

3 个答案:

答案 0 :(得分:4)

首先从$redirect_lp变量中删除所有非法字符,然后检查它是否是有效的网址:

<?php 
   $redirect_lp = $_GET['lp']; 

   // Remove all illegal characters from a url
   $redirect_lp = filter_var($redirect_lp, FILTER_SANITIZE_URL);
?>
<?php if (filter_var($redirect_lp, FILTER_VALIDATE_URL)): ?>
    <script>
       setTimeout(function(){
           window.location.href = "<?php echo $redirect_lp; ?>";
       }, 10)
    </script>
<?php endif; ?>

答案 1 :(得分:1)

有很多方法可以filter a string in PHP。这是清理URL的唯一方法:

// Remove all illegal characters from a url
filter_var($redirect_lp, FILTER_SANITIZE_URL);

或者您可以在获得输入时过滤输入:

$redirect_lp = filter_input(INPUT_GET, 'lp', FILTER_SANITIZE_SPECIAL_CHARS);

答案 2 :(得分:0)

基本上,只要您想将某些内容输出到来自用户输入的浏览器,您就需要使用函数htmlspecialchars()

使用这样的东西的正确方法(足以防止XSS攻击):

echo htmlspecialchars($redirect_lp, ENT_QUOTES, 'UTF-8');

在此类卫生设施之后,您可以验证网址(filter_var()并带有FILTER_VALIDATE_URL标记)并允许进一步的步骤将用户重定向到指定页面,如果验证通过了当然。

PS:您也可以使用strip_tags(),但请注意,它会删除标记,但不会删除"'等特殊字符,因此如果您使用strip_tags()你还必须使用htmlspecialchars()