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

How to sanitize parameters for use in javascript?

我有以下 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);

够了吗?

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

正确的使用方法是这样的(足以防止XSS-attack):

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

经过这种清理后,您可以验证 url(filter_var() 带有 FILTER_VALIDATE_URL 标志),当然如果验证通过,则允许进一步的步骤将用户重定向到指定页面。

P.S:您可能还想使用 strip_tags(),但请记住它会删除标签,但不会删除特殊字符,例如 "',因此如果你使用 strip_tags() 你还必须使用 htmlspecialchars().

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

<?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; ?>

您可以通过多种方式 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);