2013-02-09 53 views
-1

到目前爲止,我對所有$ _GET/$ _ POST輸入進行了清理,並且始終在動作請求中調用php文件名,而不是PHP_SELF。但我知道還有更多,並且它遍佈整個網絡。什麼是保護我的PHP應用程序的基本技巧?

我將不勝感激任何有關php安全的基本技巧,並希望這個問題可以作爲任何人尋找開發互聯網應用程序所需的標準安全措施的一站式場所。

+2

您應該瞭解您的Web應用程序可能容易受到哪種攻擊。然後學習如何阻止您的應用程序易受攻擊(針對特定的攻擊)。 – 2013-02-09 22:54:43

+0

是的,你總是保護你的城市免受威脅,並且你必須知道navnav的威脅 – 2013-02-09 22:55:21

+0

,隨時在答案中詳細闡述。你似乎知道我在找什麼。 – Silvius 2013-02-09 23:06:58

回答

1

甚至比逃避與mysql_real_escape_string每個用戶輸入的方法是使用準備好的語句。

你可以閱讀一下:http://php.net/manual/en/pdo.prepared-statements.php

預處理語句你是快速,安全。快速,因爲他們準備一次並執行很多次。安全,因爲它們對SQL注入攻擊非常免疫。

另一種類型的攻擊是跨站點請求僞造攻擊。許多PHP框架已經爲這類問題做好了準備,並以某種方式解決它。如果你使用的是框架,你應該檢查它是否提供了csrf防禦。如果你在沒有框架的情況下工作,你應該開始閱讀這種攻擊。

最後但並非最不重要的是,存在XSS類型的攻擊(跨站點腳本)。它與javasript中用戶輸入的不當轉義有關。攻擊者可以竊取用戶的一些重要數據。所以你也應該防止這種攻擊。看這裏:http://phpmaster.com/php-security-cross-site-scripting-attacks-xss/

這些是基本的攻擊類型。如果你可以阻止他們,那麼你可以更安全地保證網頁的80%。

+0

謝謝你的謙卑回答,sebast。 – Silvius 2013-02-11 20:44:28

1

如果腳本正在與數據庫服務器交互,則發送到此服務器的所有查詢都必須進行轉義以避免sql injections。如果不採取這種安全措施,可以完成大量的破壞,但幸運的是,由於函數已經存在於php中,因此逃脫字符串非常簡單。 對於MySQL數據庫是mysql_real_escape_string(string $unescaped_string [, resource $link_identifier ])

這裏是如何工作的例子:

腳本:index.php的用戶= 「;? TRUNCATE TABLE用戶; SELECT * FROM用戶WHERE USER ='

$user = mysql_real_escape_string($_GET['user']); 
mysql_query("SELECT * FROM users WHERE user = '$user'"); //The table users won't be truncated