打造刀郎安全PHP系統 · 續
前言
上一期給大家講述瞭如何打造刀郎安全PHP系統【傳送門】,本期我們繼續。
最近某某酒店火了一把,動不動就開始脫褲子,很嚇人啊,從自己打造安全的角度出發,我覺得最大問題是程式員參差不齊,還有就是老闆壓得太狠,功能都實現不完,哪有時間加固網站安全啊!由於網站功能太多,實現太複雜,難免會有sql注入,那麼怎麼防範?
實現原理
我想到的方法是使用者資訊和網站資料資訊分開處理,也就是放到不同機器的不同資料庫中,先看看下面的圖,我再根據圖來講解。
防範分為二部分
第一部分:使用者網站,也就是程式設計師開發功能和實現的程式碼部分,也是最容易出現sql注入的部分;
第二部分:授權系統,這裡就是我們需要重點保護的地方,由於功能單一,實現部分也簡單,做安全比較容易。
建議這二部分分二臺機器部署,當有使用者註冊和登陸的時候,使用者網站會跳轉到授權系統,進行驗證,驗證完成後,再跳轉到使用者網站,這樣的好處就是當用戶網站出現sql注入或者上傳漏洞的時候不會威脅到使用者資料庫的安全。
實現程式碼
1.打造授權系統
寫了一個簡單的例子,一共5個檔案(login.html,login.php,reg.html,reg.php,valid_login.php),
login.html,login.php
是登陸部分,login.html是前端表單的實現,login.php是後端接收資料的處理;
reg.html,reg.php
是註冊部分,reg.html是前端表單的實現,reg.php是後端接收資料的處理;
valid_login.php
驗證使用者網站傳送過來的授權碼是否有效。
1.1 reg.php的實現
接收到使用者名稱的密碼後,先比較一下密碼是否一致,如果一致,直接用base64進行加密,
加密完成以後,查詢一下使用者名稱是否已經存在,不存在插入加密的base64使用者名稱和密碼資訊,再跳轉到授權系統的登陸頁面。
1.2 login.php的實現
接收登陸的賬號和密碼去掉空格用base64加密一次,再到資料庫取查詢。
如果賬號和密碼匹配,我們就生成授權碼(base64加密一下)並且當前的時間,他們更新到資料庫中,同時跳轉到使用者網站127.0.0.1中去(這裡的授權碼和使用者名稱是沒有加密的)。
1.3 valid_login.php的實現
用接收到使用者網站傳送過來的使用者名稱和授權碼的時候,我們給授權碼和使用者名稱用base64加密一下,再到資料庫中查詢一下,當然這裡還有時間欄位沒有實現,大家自己寫程式碼,如果匹配正常就返回使用者的資訊,比如使用者是否有效,使用者名稱,使用者等級。
2.使用者網站授權部分實現
接收到授權系統傳送過來的授權碼和原始使用者名稱後,開始驗證授權碼和使用者名稱是否有效。
2.1 is_login.php的實現
把使用者名稱和授權碼傳送到授權系統127.0.0.1(這裡我是一臺開發機器所以授權系統和使用者網站的地址一致)valid_login.php頁面中去驗證一下,授權系統的valid_login.php會返回一個json,我們判斷jison返回valid的值, 就知道使用者的合法性 valid=1表示使用者有效,valid=0 表示使用者無效,sid是使用者的等級,管理員還是普通使用者。