2012-12-24 69 views
-4

我是使用PHP創建網站的新手,最近我從一位朋友那裏獲得了一條提示,如果我從表單輸入的所有數據都逃脫了,那麼我的網站將不易受到HTMLi和SQLi攻擊。比方說,例如:我如何逃避字符串中的所有標點符號與PHP?

$_POST['name'] is equal to "<h1>You could have prevented this</h1>" 

會發生什麼事是在我的網站會出現非常大的這是不好的。我希望它顯示爲

<h1>blabla</h1> 

布拉布拉

有一個簡單的功能呢?

+0

我不確定在你的兩個例子之間看到差異。 –

回答

4

這取決於您要放置數據的位置。

如果您將它反映到HTML頁面中,請使用類似htmlentities()的內容。

如果將它放入SQL字符串中,請使用mysqli_escape_string()和/或使用參數化查詢(mysqli的「準備」或PDO)。

如果您將它回顯到頁面上的JavaScript片段中,請使用類似json_encode()的內容。

關鍵是你需要使用右轉義函數來做你正在做的

+0

好的,謝謝你的提示。 – Shaun

1

使用htmlentities()htmlspecialchars()用於將用戶輸入輸出到頁面上。這可以防止XSS。

要防止SQL注入,您應該使用Prepared Statement(例如PDO或MySQLi),而不是轉義。轉義是一種防止SQLi的原始方式,並不總是100%安全,不像Prepared Statements(正確使用)。

SQLi和XSS是不同的問題,應單獨解決。沒有一種適合所有解決方案的解決方案來防止所有類型的漏洞。應該逐個解決每種類型的漏洞。

+0

工作完美,非常感謝。 – Shaun

0

因爲HTML和SQL攻擊是不同的東西,所以你的「提示」沒什麼意義。但是,如果您想避免顯示出現問題,請使用htmlspecialchars()htmlentities()來轉義此類數據。如果你想照顧SQLInjection,使用mysqli_escape_string()或同等效果(PDO自動跳轉)

相關問題