2015-03-31 65 views
1

如果在PHP代碼的開頭恰當地使用了「Html-Entity Encoded」,那麼在表單字段中單獨使用這種字符組合是否可用於XSS或SQL攻擊?Html-Entity編碼爲空的HTML標記

<>

這是一個非常簡單的程序,顯示早在文本字段的值,當我們提交表單:

<?php 

    foreach ($_POST as &$_HTTP_FIELD) { 
    $_HTTP_FIELD = htmlentities($_HTTP_FIELD,ENT_QUOTES,'ISO-8859-1'); 
    } 
    foreach ($_GET as &$_HTTP_FIELD) { 
    $_HTTP_FIELD = htmlentities($_HTTP_FIELD,ENT_QUOTES,'ISO-8859-1'); 
    } 

?> 

<html><body> 
    <form action="/index2.php" name="abcd" method="post"> 
    <input type="text" name="texte" value="<? echo $_POST['texte'];?>"> 
    <input type="submit" name="Soumission" value="Submit"> 
    </form> 
</body></html> 

我敢肯定,這不遵循最佳編碼實踐,但其本身,如果echo-ed變量位於「值」字段中,則此代碼似乎不具有風險。

但是,當我們在文本字段中嘗試「<>」時,虛擬主機防火牆將通過發送403錯誤來阻止請求。

爲了清晰起見,我沒有在這裏指定文檔編碼,但實際上文檔是在ISO-8859-1中生成的。所以它匹配htmlentities函數。

+0

沒有太多的信息,但現在讓我們說,我的虛擬主機不會讓我的PHP代碼嘗試自行清理POST數據。即使我在所有POST變量中循環並刪除它們,也會引發錯誤403。 – 2015-03-31 22:19:37

+0

我們可以看到你的php代碼嗎? – bigben3333 2015-03-31 22:39:02

+0

查看編輯的問題。 – 2015-03-31 23:00:37

回答

0

<>可能無法正常工作,但

" onmouseover="alert(1) 

可能會因爲這成功被渲染爲

<input type="text" name="texte" value="" onmouseover="alert(1)"> 
+0

正如我最初的問題所述,我的意圖是將輸入轉換爲html實體,因此您建議中的雙引號將呈現爲「"」,因此完全無害。但無論如何,如果我「忘記」轉換爲html實體,那麼「<>」不會像你所說的那樣做任何有害的事情。所以我認爲你的回答令人滿意。這證明我的網站託管人高估了「<>」的風險。 – 2015-04-05 05:16:04