2011-10-04 22 views
1

嗨,我打算讓用戶能夠提交一些代碼段(php,java,javascript C++等等......他們想要的任何我的意思)。使用戶能夠提交代碼在php中替換什麼?

因此,任何人都可以建議我最好的做法,以使其對我的網站安全嗎? :))

我的意思是哪些標籤/字符/字符串在PHP中一次逃脫提交代碼字符串?

+0

你想用該代碼做什麼?你會運行它嗎? – kapa

+0

顯示...對不起:P – sbaaaang

回答

1

在查詢中使用佔位符,您甚至不必轉義輸入。 佔位符,綁定和準備好的語句絕對是首選的方法。

對於超過1個查詢的任何事情都會更快,因爲您可以重複使用這些句柄並更改輸入。

更安全。該字符串不會被查詢...解釋過。你存儲的是你得到的。

我需要知道更多的關於您的目標SQL給相關的例子,但這裏的一些鏈接:

PDO風格結合:http://docs.php.net/pdo.prepared-statements

mysqli的風格結合:http://docs.php.net/manual/en/mysqli-stmt.bind-param.php

當你讀回來,用

htmlspecialchars($string, ENT_QUOTES); 

ENT_QUOTES選項確保單曲和雙曲otes得到逃脫。

+0

對不起,我忘了我正在使用Mongo DB – sbaaaang

+0

無論如何,我檢查真的很好,謝謝:)) – sbaaaang

7

如果您的目的是在屏幕上顯示代碼,則在將其存儲到數據庫(如果您打算存儲它)之前,不需要轉義或替換任何東西。當然,這並不適用於通過諸如mysql_real_escape_string()之類的數據庫(或您的RDBMS的等效清理例程)轉義數據庫插入。這一步仍然是絕對必要的。

當顯示的代碼,只要確定:

  1. 你不通過eval()或系統調用評估任何提交的代碼。

  2. 將代碼顯示回瀏覽器時,請使用htmlspecialchars()進行轉義。永遠不要顯示它,否則你會引入跨站點腳本漏洞。

1

如果你不打算自動運行它,你不需要轉義任何東西(除了通常的mysql衛生)。

1

我不是專家(我昨天才知道這件事),但至少對於HTML,你可以嘗試使用htmlentities(請看this)。 使用htmlentities轉換了某些內容後,它會變成純文本,所以如果在瀏覽器中打開它,您將看到標籤和所有內容(例如,它將寫入<a href="blah blah">),如果將其寫入日誌或其他內容,然後打開在基於文本的編輯器中,您將會使用一些代表html實體的符號和標籤。

如果您需要轉換回來,您可以使用html_entity_decode函數,我想,但我會下注猜測並假定您不需要轉換回來。

對於其他語言,我不知道你應該做什麼。

相關問題