PCI Scan警告我们跨站点脚本

时间:2014-10-03 14:24:56

标签: security scripting cross-site

我们收到了一份扫描报告,其中列出了我们网站上之前从未出现过问题的一些项目。以下代码中的哪些内容是跨站点脚本的漏洞?

<?php $Get_url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];?>
<div class="event-social">
    <ul>
        <li><a href="#" onclick="window.open('https://www.facebook.com/sharer/sharer.php?u='+encodeURIComponent(location.href), 
                       'facebook-share-dialog', 
                       'width=626,height=436'); 
                        return false;">
                        <img src="/images/events-calendar/cal-facebook.gif" alt="Share on Facebook" />
            </a>
        </li>
        <li><a href="http://twitter.com/share?&url=<?php echo $Get_url; ?>&via=niagaraparks"><img src="/images/events-calendar/cal-twitter.gif" alt="Twitter" /></a>
        </li>
        <li><a href="#"
                        onclick="window.open('http://plus.google.com/share?url=<?php echo $Get_url; ?>',
                        'popupwindow',
                        'scrollbars=yes,width=800,height=400').focus();"><img src="/images/events-calendar/cal-googleplus.gif" alt="Google+" /></a>
        </li>
    </ul>
</div>

在这里:

 <li class="social"><a href="http://blog.xxxxxxxxxx.com/?feed=rss2" target="_blank" id="rss"><img src="/images/homepage/icon-blog.png" alt="RSS" /></a></li>

然后我们的联系表单页面中有几点(lastname参数,emailc参数等:

<div class="line"><label for="firstname">First Name</label>:        
        <input id="firstname" maxlength="55" name="firstname" type="text" value="<?=$_REQUEST["firstname"] ?>" /></div>
    <div class="line"><label for="lastname">Last Name</label>:
        <input id="lastname" maxlength="55" name="lastname"  type="text" value="<?=$_REQUEST["lastname"] ?>" /></div>
    <div class="line"><label for="email">E-mail</label>:
        <input id="email" maxlength="100" name="email"  type="text" value="<?=$_REQUEST["email"] ?>"/></div>
            <div class="line"><label for="emailc">Confirm E-mail</label>:
        <input id="emailc" maxlength="100" name="emailc"  type="text" value="<?=$_REQUEST["emailc"] ?>"/></div>

非常感谢任何帮助。

更多详情

我做了一些改变,希望能解决我的问题:

<?php $Get_url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$Get_url = urlencode($Get_url);
?>
<div class="event-social">
<ul>
    <li><a href="#" onclick="window.open('https://www.facebook.com/sharer/sharer.php?u='+encodeURIComponent(location.href), 
                   'facebook-share-dialog', 
                   'width=626,height=436'); 
                    return false;">
                    <img src="/images/events-calendar/cal-facebook.gif" alt="Share on Facebook" />
        </a>
    </li>
    <li><a href="http://twitter.com/share?&url=<?php echo $Get_url; ?>&via=niagaraparks"><img src="/images/events-calendar/cal-twitter.gif" alt="Twitter" /></a>
    </li>
    <li><a href="#"
                    onclick="window.open('http://plus.google.com/share?url=<?php echo $Get_url; ?>',
                    'popupwindow',
                    'scrollbars=yes,width=800,height=400').focus();"><img src="/images/events-calendar/cal-googleplus.gif" alt="Google+" /></a>
    </li>
</ul>

对于联系表单,我在将输入变量回显到电子邮件时已经使用了strip_tags,这是否可以避免这个问题?或者我还需要在输入处转义变量吗?现在,我已经更改了我的strip_tags或htmlspecialchars:

$emailContents .= "<tr style='padding:10px;'><td style='padding:3px 10px;'><strong>E-mail:</strong> </td><td style='padding:3px 10px;'>" . htmlspecialchars($_POST['email']) . "</td></tr>";

但扫描仪似乎关注输入代码:

            <input id="email" maxlength="100" name="email"  type="text" value="<?=$_REQUEST["email"] ?>"/></div>

我不确定如何修改这些行以逃避/消毒该输入。

1 个答案:

答案 0 :(得分:1)

$_SERVER['REQUEST_URI'] 

如果您在网址末尾添加参数,那么$ _SERVER [&#39; REQUEST_URI&#39;]会将它们添加到您的脚本中。这可能是跨站点脚本问题,因为您随后会回显页面上的值,这意味着您网站的访问者可以更改网页的内容。