2016-01-03 48 views
2

我一直在從頭開始構建網站,雖然我有一些編碼背景(特別是Python和C的各種風格),但我自學html,php,sql等等。安全的PHP密碼輸入可能嗎?

我非常希望能夠在我的網站上添加「管理員視圖」,以便我可以更輕鬆地添加和修改內容。我花了大量的時間尋找一種安全的方式,隱藏在密碼後面,但似乎這是非常困難的,甚至是不可能的。

由於我對互聯網安全工作原理並不完全瞭解,唯一的辦法是讓登錄php文件包含一個來自public_html文件夾之外的php文件,其中包含實際的密碼條目,該條目本身必須包含一個隨機生成的方法來修改密碼輸入指令,以防止任何人攔截我輸入的密碼以後才能使用它,然後解密輸入的密碼並將其發送到包含管理基礎結構的public_html文件夾外的其他php文件視圖。

鑑於我已經使用了多個需要輸入用戶名/密碼的網站,這些網站使用了一個不太複雜的方案來保護它們,我假設存在一個更好的系統。但是,任何足夠堅決的攻擊者都可以看到客戶所有信息的主要問題,這似乎使這種情況變得不可能。我錯過了什麼?

+1

使用'password_hash'來創建密碼的散列,然後將其存儲在某個地方。在登錄時,使用'password_verify'將提交的密碼字符串與存儲的哈希進行比較。這樣你就不會存儲任何密碼,你應該是「安全」的。你不應該在任何地方以純文本的形式存儲密碼,如果某人能夠訪問你的數據庫,或者由於一些錯誤配置/利用可以讀取密碼文件,該怎麼辦? – JimL

+1

確保您的密碼錶格通過https –

+0

提交存儲不是問題,傳輸是。我的印象是任何監控網站的人都可以竊取散列值,欺騙登錄頁面並以這種方式獲得訪問權限,如果那是我所做的。 –

回答

2

你說得對,目前無法通過你自己的應用程序來保護客戶端和服務器之間的密碼傳輸。如果攻擊者可以進行ManInTheMiddle攻擊,他可以做與客戶端完全相同的攻擊,或者可以在發送之前剝離試圖加密或散列用戶密碼的JavaScript。

所以你唯一能做的就是使用加密的SSL/HTTPS連接。大多數提供商提供安裝SSL證書,但通常這有點貴,有時只能在專業版中使用。也有免費提供它的主機。

SSL連接的加密工作,因爲已經有一個共享密鑰。瀏覽器將安裝根證書列表,並且可以使用這些證書來設置加密連接。

2
  1. 這是最重要的一點:使用HTTPS。

  2. 在發送到服務器之前,您應該在javascript中使用密碼的哈希值,並且只使用哈希值。那樣的話,真正的密碼並不容易理解。請記住鹽的散列。客戶端散列的一點是它掩蓋了原始密碼。 (很多用戶在多個網站使用相同的密碼,這樣原來的密碼是很難在拿到。)

這裏是一個很好的實現SHA-256:http://www.movable-type.co.uk/scripts/sha256.html

  • 在存儲它之前,在服務器端再次散列它,以防有人訪問您的數據。不要忘記鹽。

  • 記住,安全只是度的問題:C)

  • 在那裏你存儲哈希不太重要。只要確保它不可用於外部。 使用.httpaccess文件限制訪問。這裏有一些例子:http://blog.dreamhosters.com/kbase/index.cgi?area=3083

    +0

    如何使用HTTPS?我一直在搜索互聯網幾天,並沒有找到有用的答案。我不是託管在我自己的服務器上,而是使用虛擬主機服務(eHost,如果它很重要),並且沒有直接訪問服務器的權限。 –

    +1

    我注意到JavaScript中的散列/加密是最近討論過的一個話題。我不確定它真的帶來了很多東西。如果您試圖緩解擁有Web服務器的人以獲取純文本 - 他們可以換出JavaScript。另外哈希服務器端肯定應該使用'password_hash',看起來這將是一個安全的選擇,因爲他們打算隨着技術的改變/改進對其進行更新。 – JimL

    +1

    ''你應該在javascript中的密碼上使用哈希值,然後發送到服務器上'' - 那麼每個人都可以訪問salt?客戶端散列不會將散列*變成*它自己的純文本密碼? – David