2013-07-12 76 views
1

我正在開發一個應用程序,我正在閱讀實施安全措施。我設置了一個類來自動生成表單元素,並且該類將php字符串變量嵌入到html中以創建字段。然而,我注意到,htmlspecialchars()並不是必需的,因爲我去實現它。所以,我試圖僞惡意關閉此:在這種情況下不需要特殊產品嗎?

<input type="text" name="email">... rest of html 

到:

<input type="text" name="email"><br><br> 

然而,前後都使用用htmlspecialchars()之後,我的瀏覽器給了我這個當我嘗試編輯前端html:

<input type="text&quot; name=&quot;email&quot;&gt;&lt;br&gt;&lt;br&gt; 

這只是自動實現的東西嗎?如果是這樣,這是來自PHP更新(我認爲我發現它是PHP 5.4中的更新)?

此外,我可以放棄使用htmlspecialchars()?

謝謝!

編輯:更多信息請

$this->type = 'text' //what I would normally use 
$this->type = 'text" name="name"><br><br>' //my attempt to manipulate the html 
$output = "<input type='$this->type' name='$this->name'"; 
$output .= ... close the tag, etc. 
echo $output; 
+0

你如何測試確保你正在查看源代碼,而不是查看開發工具或螢火蟲。 – Orangepill

+0

我正在使用螢火蟲,但其他回聲陳述顯示爲他們的HTML形式,這一個行爲就像我用htmlspecialchars() –

+0

使用瀏覽器查看源... DOM觀衆顯示它是如何解釋,並不總是如何返回。 – Orangepill

回答

2

嘗試此操作:

$this->type = 'text\' name="name"><br><br>' //my attempt to manipulate the html 

應該打破你的HTML,因爲你的屬性值的分隔符是單引號,而現在它們出現在你的屬性文字也是如此。

請確保不要使用任何複雜的DOM檢查器,如螢火蟲,但要查看由您的服務器發出的純粹的源代碼。

+0

您的操作工作。 Htmlspecialchars()修復了操作。謝謝! –

3

,只要你採取一些文本,並將其插入到一些HTML作爲字符串(除非您知道該文本將不包含任何字符,則需要使用的htmlspecialchars在HTML中有特殊含義,但即使使用htmlspecialchars也是一個好習慣)。

我無法解釋爲什麼你不明輸入,當通過你的不明運行代碼,然後通過瀏覽器的解析器運行(錯誤恢復功能),爲您提供了輸出。


後的問題進行了更新:

$this->type = 'text" name="name"><br><br>' //my attempt to manipulate the html 
$output = "<input type='$this->type' name='$this->name'"; 

你的屬性值與'字符分隔。您的數據不包含任何'字符,因此它不會終止屬性值並轉義。

+0

我添加了希望有幫助的細節。 –

相關問題