激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - 淺談php(codeigniter)安全性注意事項

淺談php(codeigniter)安全性注意事項

2021-05-08 18:25PHP教程網 PHP教程

下面小編就為大家帶來一篇淺談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:

?
1
$config['csrf_protection'] = TRUE;

 

注意,這個開了以后,所有的向外站進行的請求都被阻止了。如果我們網站有向其他網站獲取數據的行為,比如說調用api,那就不可以啟用這個開關。

6、xss攻擊

CI會對post數據進行xss過濾,只要這樣調用:

?
1
$this->input->post('a',true);

只要加一個參數true,就可以對post的數據進行xss過濾。

7、重放

你把用戶名密碼加密了,傳到服務器進行登錄驗證,攻擊者并不需要解密你這些用戶名密碼,他只要把截獲的這些數據包,重新再操作一次,就可以實現登錄,這就是重放。

5、6的防御措施:每個表單包含一個隱藏的只能用一次的隨機碼token。

只用一次的token實現:redis 到期失效 使用后直接刪掉

8、總結:用戶安全登錄流程

<1>session基本策略:

(1)session僅作會話session,關閉瀏覽器即失效;

(2)session的有效期設置得越短越安全,比如說60秒;

(3)相應的需要修改session的刷新時間,比如說30秒;

(4)設置用redis存儲session。

配置如下:

在php.ini:

?
1
session.gc_maxlifetime = 60

 

這個是session的有效期,默認是1440秒,即24分鐘,改為比如說60秒。當60秒后,客戶端跟服務端這個sid對得上的話,也是無效的,應該在60秒之前刷新一次頁面更新sid,怎么更新下面有說;

在application/config/config.php:

?
1
2
3
4
5
6
7
$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

<2>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被偷了那么有比較大的可能這個賊去使用的時候已經過期,安全性會比較高。

<2>one-times-tokens:

一次性的token

以上這篇淺談php(codeigniter)安全性注意事項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲涩涩图 | 久久精品视频亚洲 | 成人毛片免费播放 | 成人免费网站在线观看 | 一级黄色免费观看视频 | 午夜激情视频网站 | 国产91九色视频 | 久久国产综合精品 | 国产羞羞视频在线免费观看 | 国产欧美日韩久久久 | 国产精品久久久久久久久久三级 | 精品一区二区久久久久久按摩 | 久久精品亚洲欧美日韩精品中文字幕 | 一级片免费在线 | 久久国产精品二国产精品中国洋人 | v天堂在线视频 | 国产一级一级片 | 2021年无线乱码播放高清完整 | 国产午夜三级一区二区三桃花影视 | 黄色网页在线观看 | 在线播放的av网站 | 成人一区二区在线观看视频 | 亚洲欧美国产高清va在线播放 | 欧美人人干 | 秋霞a级毛片在线看 | 视频一区二区三区中文字幕 | 色人阁导航 | 少妇一级淫片免费放正片 | 欧美成a人片在线观看久 | 成人三级黄色片 | 91高清在线观看 | 中国嫩模一级毛片 | 黄视频免费在线 | 成人亚洲一区二区 | 哪里可以看免费的av | 作爱在线观看 | 青青草免费观看 | 成人免费久久网 | 羞羞视频入口 | 亚洲性在线视频 | 李宗瑞国产福利视频一区 |