存儲型xss(防)


存儲型XSS對用戶的輸入進行過濾的方式和反射型XSS相同,這里我們使用htmlspecialchars()( 把預定義的字符 "<" (小於)和 ">" (大於)轉換為 HTML 實體 )

htmlspecialchars和htmlentities的區別:

htmlspecialchars 只轉義 & 、" 、' 、< 、> 這幾個html代碼

htmlentities 卻會轉化所有的html代碼,連同里面的它無法識別的中文字符也會轉化。

新建Xss_htmlspecialchars_Storage.php ,代碼如下:

    <span style="font-size:18px;"><meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>  
    <html>  
    <head>  
    <title>XssStorage</title>  
    </head>  
    <body>  
    <h2>Message Board<h2>  
    <br>
    <form action="Xss_htmlspecialchars_Storage.php" method="post">  
    Message:<textarea id='Mid' name="desc"></textarea>  
    <br>  
    <br>  
    Subuser:<input type="text" name="user"/4><br> 
    <br>
    <input type="submit" value="submit" onclick='loction="XssStorage.php"'/>  
    </form>  
    <?php  
    if(isset($_POST['user'])&&isset($_POST['desc'])){  
    $log=fopen("sqlStorage.txt","a");  
    fwrite($log,htmlspecialchars($_POST['user'])."\r\n"); # 在此對用戶輸入數據$_POST['user']進行過濾
    fwrite($log,htmlspecialchars($_POST['desc'])."\r\n"); # 在此對用戶輸入數據$_POST['desc']進行過濾
    fclose($log);  
    }  
      
    if(file_exists("sqlStorage.txt"))  
    {  
    $read= fopen("sqlStorage.txt",'r');  
    while(!feof($read))  
    {  
        echo fgets($read)."</br>";  
    }  
    fclose($read);  
    }  
    ?>  
    </body>  
    </html></span>  

當我們在Message中輸入<script>alert('xss')</script>

可以看到頁面並沒有彈窗,查看網頁html代碼:

可以看到htmlspecialchars()函數對用戶輸入的<>做了轉義處理。

筆記來源於: 跨站腳本漏洞(XSS)基礎講解 - 簡書 (jianshu.com)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM