1. 程式人生 > >跨站指令碼(XSS)的一些問題,解決alert(42873)

跨站指令碼(XSS)的一些問題,解決alert(42873)

問題:跨站指令碼(XSS)的一些問題,主要漏洞證據: <script>alert(42873)</script>,對於這個問題怎麼解決?
方案一:
一、 過濾使用者輸入的內容,檢查使用者輸入的內容中是否有非法內容。如<>(尖括號)、"(引號)、 '(單引號)、%(百分比符號)、;(分號)、()(括號)、&(& 符號)、+(加號)等。
二、嚴格控制輸出
可以利用下面這些函式對出現xss漏洞的引數進行過濾
1、htmlspecialchars() 函式,用於轉義處理在頁面上顯示的文字。
2、htmlentities() 函式,用於轉義處理在頁面上顯示的文字。
3、strip_tags() 函式,過濾掉輸入、輸出裡面的惡意標籤。
4、header() 函式,使用header("Content-type:application/json"); 用於控制 json 資料的頭部,不用於瀏覽。
5、urlencode() 函式,用於輸出處理字元型引數帶入頁面連結中。
6、intval() 函式用於處理數值型引數輸出頁面中。
7、自定義函式,在大多情況下,要使用一些常用的 html 標籤,以美化頁面顯示,如留言、小紙條。那麼在這樣的情況下,要採用白名單的方法使用合法的標籤顯示,過濾掉非法的字元。
各語言示例:
PHP的htmlentities()或是htmlspecialchars()。
案例:
<?php require_once("sql123_contact.php"); ?>
<?php
ini_set('display_errors', false);
if(!$_GET['id']){
	$title = "新聞中心";
	$while = '';
}else{
    $id = htmlspecialchars($_GET['id']);
    $rs_class = mysql_query("select * from tb_article_class where id='$id'");
    $rst_class = mysql_fetch_array($rs_class);
    $title = htmlspecialchars($rst_class['class']);
	$while = htmlspecialchars(" where class='"). htmlspecialchars($rst_class['id']). htmlspecialchars("'");
}
$titleClass = '新聞中心';
?>
<?php require_once("header.php"); ?>
<?php require_once("top.php"); ?>
    <div id="wrap">
    	<div class="content">
        	<div id="sidebar">
            	<div class="left">
                	<div class="leftit"><img src="image/comapny6.jpg" width="210" height="78"></div>
                    <div class="leftnav">
                    	<ul>
                        	
                        	<?php
							  $rs_menu = mysql_query("select * from tb_article_class");
		                      while($rst_menu = mysql_fetch_array($rs_menu))
		                      {
			                    if($rst_menu['id']=='$id'){$str = ' class="selected"';}else{$str = ' class="unselected"';}
			                    echo'<li><a href="article.php?id='.$rst_menu['id'].'" '.$str.'>'.$rst_menu['class'].'</a></li>';
		                      }
							?>
                            
                        </ul>
                    </div>
                    
                    <?php require_once("left.php"); ?>
                    
                </div>
                <div class="leftd"></div>
            </div>
            <div class="main">
            	<div class="hot">
                	<a href="/">首頁</a>><a title="<?php echo $titleClass ?>"><?php echo $titleClass ?></a>><a title="<?php echo $title ?>"><?php echo $title ?></a>
                </div>
                <div class="newslist">
                    <ul>
     <?php
        $num=10; 
        $rse=mysql_query("select * from tb_article".$while);
        $nu=mysql_num_rows($rse);
        if(!$_GET['page'])
        {$page='1';}else
        {$page=$_GET['page'];}
        $nur=ceil($nu/$num);
        $sql="select * from tb_article".$while." order by id desc limit ".(($page-1)*$num).",".$num;
        $rs=mysql_query($sql);
    	while($rst=mysql_fetch_array($rs))
	    {
			  echo'<li><span>> '.$rst['time'].'</span><a href="article_look.php?id='.$rst['id'].'" target="_blank" title="'.$rst[title].'">·'.$rst[title].'</a></li>';
		}
     ?>
                    </ul>  
                    <div class="fenye">
         <?php
		   echo'第'.$page.'頁\共'.$nur.'頁\共'.$nu.'條 ';
		   $url = 'article.php?id='.$id.'&&';
		   Paging($page,$nur,$url);
		 ?>
                    </div>      
                </div>
            </div>
            <div class="clear"></div>
        </div>
    </div>
    <div class="fb"></div>
<?php require_once("foot.php"); ?>