php
  • xss
  • htmlspecialchars
  • htmlpurifier
  • 2013-12-12 75 views 1 likes 
    1

    我試圖瞭解XSS攻擊。我知道我應該使用htmlspecialchars(),無論何時向用戶輸入的瀏覽器輸出內容。下面的代碼工作正常。檢測和防止XSS,但允許html格式化

    我不明白的是是否需要使用htmlspecialchars()來回顯$ enrollmentno?

    <?php 
    
    
    $enrollmentno = (int)$_POST['enrollmentno']; 
    
    
    
    
    
    echo "<div style='border-radius:45px; border-width: 2px; border-style: dashed; border-color: black;'><center><h4><b>$enrollmentno</b></h4></center></div>"; 
    
    
    $clink = "http://xyz/$enrollmentno/2013"; 
    
    echo"<iframe src='$clink' width='1500' height='900' frameBorder='0'></iframe>"; 
    ?> 
    

    如果我這樣做

    $safe = "<div style='border-radius:45px; border-width: 2px; border-style: dashed; border-color: black;'><center><h4><b>$enrollmentno</b></h4></center></div>"; 
    
    echo htmlspecialchars($safe, ENT_QUOTES); 
    

    它不顯示HTML格式正確。

    我不確定是否必須在這裏使用HTMLPurifer。 HTMLPurifer保留HTML格式而防止XSS?

    更新

    echo "<div style='border-radius:45px; border-width: 2px; border-style: dashed; border-color: black;'><center><h4><b>".htmlspecialchars ($enrollmentno)."</b></h4></center></div>"; 
    

    的伎倆!

    +1

    爲什麼你不只是清理'$ enrollmentno'中包含值的變量 –

    +0

    謝謝。這會做什麼? 'echo「

    ".htmlspecialchars ($enrollmentno)."

    」;' –

    +0

    Ofcourse!它會做這個工作 –

    回答

    2

    如果您在HTML上下文中使用任意數據,則應該使用htmlspecialchars()。原因是它阻止了您的文本內容被視爲HTML,如果來自外部用戶,這可能是惡意的。它還可以確保您生成瀏覽器可以一致處理的有效HTML。

    假設我想讓文本「8> 3」出現在HTML中。要做到這一點,我的HTML代碼將是8 &gt; 3>編碼爲&gt;,因此它不會被誤解爲標籤的一部分。

    現在,假設我正在製作一個關於如何編寫HTML的網頁。我希望用戶看到以下內容:

    <p>This is how to make a paragraph</p> 
    

    如果我不想<p></p>被解釋爲一個實際的段落,但作爲文本,你需要編碼:

    &lt;p&gt;This is how to make a paragraph&lt;/p&gt; 
    

    htmlspecialchars()這樣做。它允許您以安全的方式將任意文本插入到HTML上下文中。現在

    ,在你的第二個例子:

    $safe = "<div style='border-radius:45px; border-width: 2px; border-style: dashed; border-color: black;'><center><h4><b>$enrollmentno</b></h4></center></div>"; 
    echo htmlspecialchars($safe, ENT_QUOTES); 
    

    這不正是你問它做的事情。你給了它一些文字,並對它進行了編碼。如果你想把它作爲HTML,你應該只是迴應它。

    現在,如果您需要將HTML顯示爲HTML並且它來自不可信來源(即不是您),那麼您需要諸如HTMLPurifier之類的工具。如果你相信源,你不需要這個。通過htmlspecialchars()運行您的所有輸出不會神奇地使事情變得安全。插入任意文本數據時您只需要它。這裏有一個很好的用例:

    echo '<h1>Product Review from ', htmlspecialchars($username), '</h1>'; 
    echo htmlspecialchars($reviewText); 
    

    在這種情況下,無論是用戶名和審查文本可以包含任何用戶輸入的,他們會正確地在使用HTML編碼。

    +0

    完美!我想我解決了我自己的問題,但你的解釋清楚地表明瞭這一點。 我無法想象用戶需要提供HTML然後有人需要使用HTMLPurifier的場景。你能給我一個簡單的例子,在那個應用程序中使用HTMLpurifier嗎? –

    +0

    @Nick_inaw假設您在留言板上接受了HTML格式的評論。這將是我認爲最常見的使用案例,但再次不常見。 HTMLPurifier肯定會被那些認爲自己獲得安全性的用戶過度使用,反而會破壞應用程序並降低安全性。它應該只在您真正想要過濾HTML時使用。 – Brad

    +0

    我現在完全明白了。謝謝。 –

    相關問題