搜尋
首頁後端開發php教程php中codeigniter安全性注意事項圖文詳解

php中codeigniter安全性注意事項圖文詳解

May 24, 2018 am 10:14 AM
codeigniter安全性注意事項

這篇文章主要介紹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中"{}"大括號的用法總結 

#PHP的郵箱寄送

################################################################ ############

以上是php中codeigniter安全性注意事項圖文詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
可以在PHP會話中存儲哪些數據?可以在PHP會話中存儲哪些數據?May 02, 2025 am 12:17 AM

phpsessionscanStorestrings,數字,數組和原始物。

您如何開始PHP會話?您如何開始PHP會話?May 02, 2025 am 12:16 AM

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

什麼是會話再生,如何提高安全性?什麼是會話再生,如何提高安全性?May 02, 2025 am 12:15 AM

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

使用PHP會話時有哪些性能考慮?使用PHP會話時有哪些性能考慮?May 02, 2025 am 12:11 AM

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

PHP會話與Cookie有何不同?PHP會話與Cookie有何不同?May 02, 2025 am 12:03 AM

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

PHP如何識別用戶的會話?PHP如何識別用戶的會話?May 01, 2025 am 12:23 AM

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

確保PHP會議的一些最佳實踐是什麼?確保PHP會議的一些最佳實踐是什麼?May 01, 2025 am 12:22 AM

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

PHP會話文件默認存儲在哪裡?PHP會話文件默認存儲在哪裡?May 01, 2025 am 12:15 AM

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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

mPDF

mPDF

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

Safe Exam Browser

Safe Exam Browser

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

MantisBT

MantisBT

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

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

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

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器