2010-08-13 41 views
1

我正在閱讀關於表單安全性的文章,因爲我有一個用戶可以添加消息的表單。php表單安全性

我看,這是最好使用用strip_tags(),用htmlspecialchars()和nl2br()

別的地方說要用html_entity_decode()

我在我的網頁此代碼,將用戶輸入

<?php 
    $topicmessage = check_input($_POST['message']); //protect against SQLinjection 
    $topicmessage = strip_tags($topicmessage, "<p><a><span>"); 
    $topicmessage = htmlspecialchars($topicmessage); 
    $topicmessage = nl2br($topicmessage); 
?> 

但是當我回聲消息,這一切都在同一行,看來,在休息已經被用strip_tags刪除而不是通過nl2br()

放回

對我來說,這是有道理的,爲什麼它這樣做,因爲如果休息已被刪除,它如何知道把它放回(或做它)?

,無論如何,我在尋找一種方式,我可以保護我的形成被用來嘗試和黑客網站類似形式

回答

1

你只是打印表單內容之前需要用htmlspecialchars使用JavaScript和mysql_real_escape前發佈到SQL中(打印前你不需要),你應該很好。

做你的stipping標籤的方式是非常危險的,你需要限制屬性的允許標籤的短列表 - 這不是你可以在1行中完成的。您可能想要查看HTML標準化程序,如Tidy。

+0

-1不要使用mysql_real_escape();使用參數化查詢。 – 2010-08-13 16:00:29

+1

我真的沒有看到使用mysql_real_escape()的危害。你的陳述有什麼理由嗎? – marekventur 2011-05-14 15:17:09

8

你有兩個選擇:

  1. 允許絕對沒有HTML。使用strip_tags()允許標籤或htmlspecialchars()轉義可能存在的任何標籤。

  2. 允許HTML,但您需要清理HTML。這是不是你可以用strip_tags做些什麼。使用庫(如HTMLPurifier)...

0
  • 使用HTML Purifier對HTML的輸入和剝奪你不想要的一切 - 但所有段落,所有錨等

無關,但很重要:

+0

-1爲什麼人們不會使用參數化查詢? – 2010-08-13 16:01:06