這篇文章主要介紹php中codeigniter安全性注意事項,有興趣的朋友參考下,希望對大家有幫助。
1、httponly
session一定要用httponly的否則可能會被xxs攻擊,利用js取得cookie的session_id。
要用框架的ci_session,更長的位數,httponly,這些預設都配好了。
不要用原生的phpsession,而要用ci_session。 ci_session位數更長。
如果要用原生的session,應該這樣設定(php.ini):
session.sid_length //sid的長度,這裡要加長,預設的太短了
session.cookie_httponly = 1#原生的session就會變成httponly了。
2、phpinfo
一定要關閉phpinfo頁面,dump的請求資訊可能會被攻擊者利用。如cookie資訊。
3、強制全站https
透過cdn跳轉,本地開發環境也要配https。如果有的環節不能使用https,例如訊息推送,那麼可以新建一個站點。
4、Strict mode
#session.use_strict_mode = 1
#只使用服務端自己產生的session id,不使用使用者客戶端產生的session id。
5、CSRF跨站請求偽造
A的cookie裡有網站example.com的session id,且未過期,B通過放一個圖片在論壇上,引誘A去點擊這個圖片,這個圖片會發起一個請求,請求偽裝成example.com,A的瀏覽器信以為真,將example.com的cookie附加到了這個請求上面,這個請求信息被B的代碼截獲並且透過非同步請求傳送給了B,B透過此cookie登入了A在example.com的帳號。
CI有防CSRF機制,也就是他會在表單裡面自動的插入一個隱藏的CSRF欄位。需要進行以下設定:
application/config/config.php:
#$config['csrf_protection'] = TRUE;
注意,這個開了以後,所有的向外站進行的請求都被阻止了。如果我們網站有向其他網站取得資料的行為,比如說呼叫api,那就不可以啟用這個開關。
6、xss攻擊
CI會對post資料進行xss過濾,只要這樣呼叫:
#$this->input->post('a',true);
只要加一個參數true,就可以對post的資料進行xss過濾。
7、重播
你把使用者名稱密碼加密了,傳到伺服器進行登入驗證,攻擊者並不需要解密你這些用戶名密碼,他只要把截獲的這些資料包,重新再操作一次,就可以實現登錄,這就是重播。
5、6的防禦措施:每個表單包含一個隱藏的只能用一次的隨機碼token。
只用一次的token實作:redis 到期失效使用後直接刪除
8、總結:使用者安全登入流程
session基本策略:
(1)session僅作會話session,關閉瀏覽器即失效;
(2)session的有效期限設定得越短越安全,比如說60秒;
(3)對應的需要修改session的刷新時間,比如說30秒;
(4)設定用redis儲存session。
設定如下:
在php.ini:
session.gc_maxlifetime = 60
這個是session的有效期限,預設是1440秒,即24分鐘,改為比如說60秒。當60秒後,客戶端跟服務端這個sid對得上的話,也是無效的,應該在60秒前刷新一次頁面更新sid,怎麼更新下面有說;
在application/ config/config.php:
$config['sess_driver'] = 'redis';//设为用redis存储session $config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = 0;//设为会话session,关闭浏览器,客户端cookie即失效 $config['sess_save_path'] = 'tcp://127.0.0.1:端口号';//redis地址 $config['sess_match_ip'] = FALSE;//要不要验证ip是否一致 $config['sess_time_to_update'] = 30;//超30秒即刷新sid $config['sess_regenerate_destroy'] = TRUE;//重新生成sid的时候删除旧sid
session id的刷新及session的過期時間區分:
#注意:這些設定跟安全關係非常大,應該注意區分及使用。
上面說的session.gc_maxlifetime是什麼意思?即一個session從產生,到過期不能用的時間。其實如果使用redis就清楚了,這個值就是使用redis保存sid的時候,設定的一個存續時間,這就很清楚了,當一個sid產生的時候就會把這個時間寫進去,那麼到了這個時間,這個key-value就會被刪掉。
那麼這個sess_time_to_update呢,這個顧名思義是刷新時間,這個時間是一個閾值,是指超過這個時間即刷新。 並不是自動刷新,而是造訪session的時候刷新! 當我們在使用session的時候,他會去判斷上次使用session跟這次使用session的間隔,如果間隔大於這個值,即刷新sid。這個使用,通常的表現就是我們在刷新頁面,需要讀取session以鑑權,那麼就是在刷新頁面的時候,兩次間隔有超過這個時間,即刷新sid,那麼結合上面的maxlifetime呢,就是刷新完之後session重新續命了,一個新的session寫進去,連帶一個重新開始的計時。
就是說呢,如果我們一會刷一下頁面一會刷一下頁面,那麼必然會在必要的時候觸發我們的刷新機制,那麼我們的session就不會過期了,永遠不會,如果經常性的在那裡刷的話。如果兩次刷新的時間間隔超過maxlifetime呢,這時會顯示登入超時了,session已經沒了,因為在過期了之後你去update,顯然是不行了,update失敗。
那麼總結就是,這個maxlifetime決定了我們兩次刷新之間不能超過多長時間,否則登入超時;而update呢肯定要小於maxlifetime,這是必然的,因為如果大於就無效了,因為過期了刷新沒用。而且最好我覺得這個update最好是maxlifetime的一半以下。如果maxlifetime很長的話(希望改善使用者體驗,讓使用者老是登入超時總是不大好),那麼這個update設的比較短也沒關係,因為設的比較短的話,假設這個session被偷了那麼有比較大的可能這個賊去使用的時候已經過期,安全性會比較高。
one-times-tokens:
一次性的token
以上就是本文的全部內容,希望對大家的學習有所幫助。
相關推薦:
PHP透過bypass disable functions執行系統指令的方法
################################################################ ############
以上是php中codeigniter安全性注意事項圖文詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

tostartaphpsession,usesesses_start()attheScript'Sbeginning.1)placeitbeforeanyOutputtosetThesessionCookie.2)useSessionsforuserDatalikeloginstatusorshoppingcarts.3)regenerateSessiveIdStopreventFentfixationAttacks.s.4)考慮使用AttActAcks.s.s.4)

會話再生是指在用戶進行敏感操作時生成新會話ID並使舊ID失效,以防會話固定攻擊。實現步驟包括:1.檢測敏感操作,2.生成新會話ID,3.銷毀舊會話ID,4.更新用戶端會話信息。

PHP会话对应用性能有显著影响。优化方法包括:1.使用数据库存储会话数据,提升响应速度;2.减少会话数据使用,只存储必要信息;3.采用非阻塞会话处理器,提高并发能力;4.调整会话过期时间,平衡用户体验和服务器负担;5.使用持久会话,减少数据读写次数。

PHPsessionsareserver-side,whilecookiesareclient-side.1)Sessionsstoredataontheserver,aremoresecure,andhandlelargerdata.2)Cookiesstoredataontheclient,arelesssecure,andlimitedinsize.Usesessionsforsensitivedataandcookiesfornon-sensitive,client-sidedata.

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器