修复php中的XSS安全问题

时间:2017-03-24 21:30:44

标签: php security xss

在安全测试期间,我不断收到跨站点脚本[存储]问题 - URL编码的POST输入文本大小设置为Largest_935538​​&#39;():; 916159 输入反映在单引号之间的<script>标记内。

受影响的文件 - change.php

经过无聊的努力,我可以找到解决的任何线索,PFB代码供您参考,有人可以指导我解决这个问题 -

<?php
include("global/user_global.php");
session_cache_limiter('nocache');

$color_array    =   array("blue","brown","black","high","style");
if(isset($_SESSION["lang"]))
{
    if($_SESSION["lang"]=="hindi")


{
        $logo       =   array("logo_hindi_blue.png","logo_hindi_high.png");
    }
    else
    {
        $logo       =   array("logo_eng_blue.png","logo_eng_high.png");
    }
}
else
{
    $logo       =   array("logo_eng_blue.png","logo_eng_high.png");
}
$referer        =   "$master_url";

if(isset($_REQUEST["font_action"]))

{
    $theme              =   $_REQUEST["theme"];
    $textsize           =   $_REQUEST["textsize"];
    if ($textsize=="")
    {
        $_SESSION["fonts"]  =   "Medium";
    }
    else
    {
        $_SESSION["fonts"]  =   $textsize;
    }
    if($theme=="")
    {
        $_SESSION["theme"]  =   "style.css";    
    }
    else
    {
        $_SESSION["theme"]  =   $theme.".css";
    }
}
else
{
    $theme          =   $_REQUEST["theme"];
    $lg             =   $_REQUEST["lg"];
    $found  =   in_array("$theme",$color_array);


if($found)
    {
        if(isset($_SESSION["theme"]))
        {
            $_SESSION["theme"]      =   $theme.".css";
            $_SESSION["logo"]       =   $logo[$lg];
        }
        else
        {
            $_SESSION["theme"]      =   "style.css";
        }
    }
    else
    {
        $_SESSION["theme"]      =   "style.css";
    }
}
header("Location: $master_url");
exit();
?>

1 个答案:

答案 0 :(得分:1)

看起来安全测试注意到您使用$_REQUEST['theme']来选择您使用的CSS文件,这看起来像是一个XSS漏洞。但是您使用in_array("$theme",$color_array);验证此输入,因此只能选择有效的CSS文件。这应该可以减轻漏洞,显然安全检查并没有认识到这一点。

但是,执行$_SESSION['fonts'] = $textsize;时,您无法进行任何验证。也许这是验证错误的来源。我不确定某人通过提供错误的字体大小可以造成多大的伤害,但这取决于你如何使用这个会话变量。