日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

如何讓PHP的代碼更安全

瀏覽:124日期:2022-09-07 10:42:02
目錄概述越權漏洞1. 水平越權2. 垂直越權3. 上下文越權JWT 的 Token 需要二次加密LFI (本地文件包含)XSSCSRF (跨站請求偽造)概述

攻擊者通過構造惡意SQL命令發送到數據庫,如果程序未對用戶輸入的 SQL命令執行判斷過濾,那么生成的SQL語句可能會繞過安全性檢查,插入其他用于修改后端數據庫的語句,并可能執行系統命令,從而對系統造成危害

例如刪除 id 為 1 的帖子,sql 如下:

$post_id = $_POST[’post_id’];$sql = 'DELETE FROM posts WHERE user_id = 1 AND id = $post_id';DB::statement($sql);

如果有人在提交 post_id 時輸入 1 OR 1 ,你的語句會組合成這樣:

$sql = 'DELETE FROM posts WHERE user_id = 1 AND id = 1 OR 1';

一般比較常出現在原生的 SQL 操作,框架一般會解決這方面的問題。通常采用參數控制或過濾特殊字符避免上述的問題。

越權漏洞1. 水平越權

水平越權就是同等角色下的用戶,不但能夠訪問和操作自己私有的數據,還能訪問其他人私有的數據,其根本是基于數據的訪問權限。

刪除用戶收款方式的場景如下:

graph LR

用戶登錄-->token

token-->獲取收款方式列表

獲取收款方式列表--token-->通過id刪除

通過收款方式 {id} 執行 delete 請求的路由為:localhost/api/payments/{id}

假如用戶A的收款方式有{1,2,3}    用戶B的收款方式有{4,5}

如果沒有做數據控制,A 登錄后攜帶 A 的 token 執行刪除的接口localhost/api/payments/4,則會刪除 B 的,所以需要對destory方法做數據控制

# 1 刪除前鑒權處理public function destory($id){ $payment = Payment::find($id); if ($payment->user_id != $this->currentUser->id) { return ... } $payment->delete();}# 2 參入id查詢刪除public function destory($id){ Payment::whereUserId($this->currentUser->id)->whereId($id)->delete();}# 3 模型關聯查詢class User extends Model{ public function payments() { return $this->hasMany(’AppPayment’); }}class PaymentController extends Controller{ public function destory($id) { $this->currentUser->payments()->whereId($id)->delete(); }}

推薦使用第三種方式做數據控制,不然面向對象白學了。獲取收款方式的列表同樣需要數據權限控制,用戶和收款方式存在一對多的關聯關系,模型關聯后,獲取用戶收款方式列表可以寫成

class PaymentController extends Controller{ public function index($id) {#帶條件的查詢$payments = $this->currentUser->payments()->where(function($query){...})->get();#不帶條件的查詢$payments = $this->currentUser->payments; }}2. 垂直越權

低權限的角色通過一些途徑,獲得高權限的能力,就發生了越權訪問。如普通用戶 guest 修改 admin 用戶的密碼;guest 可直接進入后臺取得域名管理、用戶管理等所有權限

解決這個問題,需要把權限職責以最小顆粒細分,基于 RBAC 設計權限管理系統。分為以下關聯模型

graph LR 

用戶--多對多-->角色

用戶--多對多-->權限

角色--多對多-->權限

每次執行請求時,在前置中間件判斷這個用戶是否永遠該執行請求的權限,無權限則駁回。

3. 上下文越權

攻擊者能夠利用應用程序狀態機中的漏洞獲得關鍵資源的訪問權限,這就存在上下文相關的越權。上下文相關的越權漏洞一般屬于業務邏輯漏洞。 如在找回密碼過程中,攻擊者使用自己的賬戶信息通過驗證,將他人的密碼進行了修改。

graph LR

1.郵箱驗證-->2.找回密碼

在步驟1之后,執行找回密碼,路由為 。如果此時沒有校驗當前找回密碼的賬戶是否為進行郵箱校驗后的賬戶,由可能產生越權漏洞.

路由 : 【PUT 】localhost/api/users/find-password,接收參數 email,new_password.

錯誤:校驗和修改分成 2 步localhost/api/email/check->localhost/api/users/password

class UserController extends Controller{ public function check($data) {if (checkEmail($data[’email’], $data[’code’])) {return true;}... } public function findPassword() {$user = User::whereEmail($data[’email’])->first();$user->password = bcrypt($data[’new_password’]);$user->save(); }}

正確:在 findPassword 里面再次驗證完成郵箱校驗的賬戶是否為當前找回密碼的賬號

class UserController extends Controller{ public function check($data) {if (checkEmail($data[’email’], $data[’code’])) {return true;}... } public function findPassword($data) {if (checkEmail($data[’email’], $data[’code’])) {$user = User::whereEmail($data[’email’])->first();$user->password = $data[’new_password’];$user->save();}... }}

限制分頁條目范圍,防止惡意請求

如獲文章列表的接口localhost/api/articles

public function index($params){ $pageId = $params[’pageid’] ?? PAGE_ID; //頁碼 $pageSize = $params[’pagesize’] ?? 15; //條碼 $articles = Article::where(function ($query) use ($params) { ... })->take($pageSize)->skip($pageId * $pageSize)->orderby(’id’, ’desc’)->get(); ... ...}

以上代碼如果沒有限制 pagesize 的范圍,惡意請求者請求把 pagesize 輸入 5000,10000 等甚至更大的數,會給數據庫帶來一定的壓力,localhost/api/articles?pageid=0&pagesize=10000

//用框架自帶的分頁方法public function index(){ $builder = Article::with(’category:id,name’)->orderBy(’id’, ’desc’)->paginate(8); return response()->json([’status’ => true, ’count’ => $builder->total(), ’articles’ => $builder->items()]);}JWT 的 Token 需要二次加密

許多拓展包加密出的token并不十分安全,用base64_decode可以解密獲取 加密主鍵、載荷等重要信息,所以通常需要對JWT的token進行二次加密

限制上傳文件的類型

對于一個圖片上傳的接口,如果沒有對上傳文件的格式做限制,攻擊者很有可能把 .php后綴的文件上傳到public/images目錄下,然后通過根目錄執行這個文件。

需要設計安全的文件上傳功能避免上述問題

1.文件上傳的目錄設置為不可執行

2.判斷文件類型

3.使用隨機數改寫文件名和文件路徑

4.單獨設置文件服務器的域名

禁止或者避免寫自動解壓.zip 等壓縮文件的代碼

單純地限制文件或壓縮包大小并沒有用,一個ZIP炸彈的.zip文件僅有 42 KB,但在解壓后會占用 4718592 GB

避免登錄密碼被暴力破解

1.設定嚴格的速率限制,如登錄次數限制,登錄錯誤次數達 x 次時暫停登錄 n 分鐘

2.密碼加上隨機鹽

public function reg(){ $user = new User; $salt = radom(6); $user->password = bcrypt($data[’password’] . $salt); ...}

做好異常處理,避免在生產環境中不正確的錯誤報告暴露敏感數據

如果你不小心,可能會在生產環境中因為不正確的錯誤報告泄露了敏感信息,例如:文件夾結構、數據庫結構、連接信息與用戶信息。

1.在.env 文件中關閉調試模式

APP_DEBUG=true

2.php 錯誤控制 error_reporting、display_errors

<?php// 關閉錯誤報告error_reporting(0);// 報告 runtime 錯誤error_reporting(E_ERROR | E_WARNING | E_PARSE);// 報告所有錯誤error_reporting(E_ALL);// 等同 error_reporting(E_ALL);ini_set('error_reporting', E_ALL);// 報告 E_NOTICE 之外的所有錯誤error_reporting(E_ALL & ~E_NOTICE);?>display_errors = Off

php 弱語言的設計缺陷如:in_array

$array=[0,1,2,’3’];var_dump(in_array(’abc’, $array)); //truevar_dump(in_array(’1bc’, $array)); //true# 上面的情況返回的都是 true, 因為’abc’會轉換為 0,’1bc’轉換為 1$a = null;$b = false;echo $a==$b; //true$c = '';$d = 0;echo $c==$d //true

在一些重要的地方需要使用===來作數據判斷。

LFI (本地文件包含)

LFI (本地文件包含) 是一個用戶未經驗證從磁盤讀取文件的漏洞。

不驗證過濾用戶的輸入 將它要渲染的模板文件用 GET 請求加載。

<body> <?php $page = $_GET[’page’]; if(!$page) {$page = ’main.php’; } include($page); ?></body>

由于 Include 可以加載任何文件,不僅僅是 PHP,攻擊者可以將系統上的任何文件作為包含目標傳遞。

index.php?page=../../etc/passwd

這將導致 /etc/passwd 文件被讀取并展示在瀏覽器上。

要防御此類攻擊,你必須仔細考慮允許用戶輸入的類型,并刪除可能有害的字符,如輸入字符中的 “.” “/” “”。

XSS

XSS 又叫 CSS (Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往 Web 頁面里插入惡意 html 代碼,當用戶瀏覽該頁之時,嵌入其中 Web 里面的 html 代碼會被執行,從而達到惡意攻擊用戶的特殊目的。

<body> <?php$searchQuery = $_GET[’q’];/* some search magic here */ ?><h1>You searched for: <?php echo $searchQuery; ?></h1></body>

因為我們把用戶的內容直接打印出來,不經過任何過濾,非法用戶可以拼接 URL: search.php?q=%3Cscript%3Ealert(1)%3B%3C%2Fscript%3E

PHP 渲染出來的內容如下,可以看到 Javascript 代碼會被直接執行:

<body><h1>You searched for: <script>alert(1);</script></h1><p>We found: Absolutely nothing because this is a demo</p></body>

Javascript 可以:

偷走你用戶瀏覽器里的 Cookie; 通過瀏覽器的記住密碼功能獲取到你的站點登錄賬號和密碼; 盜取用戶的機密信息; 你的用戶在站點上能做到的事情,有了 JS 權限執行權限就都能做,也就是說 A 用戶可以模擬成為任何用戶; 在你的網頁中嵌入惡意代碼;

使用htmlentities()過濾特殊字符,防止大部分的 xss 攻擊

CSRF (跨站請求偽造)

例如網站上有用戶可以用來注銷賬戶的鏈接。

<a rel='external nofollow' >銷毀賬戶</a>

如果某個用戶評論:

<img src=”http://your-website.com/delete-account”> wow

用戶將在查看此評論的時候刪除他們的賬號。

laravel 的 web 路由默認開啟了 csrf 驗證,原理是在客戶端產生一個隨機的 token,在表單校驗時判斷這個 token 是否是這個頁面上的請求

以上就是如何讓PHP的代碼更安全的詳細內容,更多關于讓PHP的代碼更安全的資料請關注好吧啦網其它相關文章!

標簽: PHP
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
热久久国产精品| 91久久亚洲| 成人看片网站| 伊人久久亚洲热| 在线一区视频观看| 亚洲黄页一区| 日韩视频1区| 久久精品理论片| 久久久影院免费| 久久精品青草| 国产精品成久久久久| 日韩精品亚洲一区二区三区免费| 中文字幕一区二区av| 日韩欧美三区| 国产精品网在线观看| 免费在线成人| av在线资源| 久久视频精品| 三级亚洲高清视频| 日韩 欧美一区二区三区| 日本一区免费网站| 国产精品九九| 日本午夜大片a在线观看| 欧美影院三区| 亚洲三级国产| 日韩av资源网| 国产精品久久观看| 99久久久久国产精品| 在线亚洲国产精品网站| 爽好久久久欧美精品| 国产欧美日韩视频在线| 国产一区二区三区四区大秀| 国产一二在线播放| 国精品一区二区三区| 久久亚洲一区| 欧美亚洲国产日韩| 色网在线免费观看| 免费视频久久| 国产美女久久| 99久久精品网站| 免费高清在线一区| 国产欧美另类| 亚洲欧洲日韩| 狠狠久久伊人中文字幕| 国产传媒av在线| 亚洲va久久| 亚洲在线国产日韩欧美| 免费人成在线不卡| 蜜臀精品一区二区三区在线观看| 麻豆国产精品777777在线| 欧美日中文字幕| 午夜在线一区二区| 婷婷五月色综合香五月| 久久精品亚洲| 狠狠爱www人成狠狠爱综合网| 欧美少妇精品| 亚洲在线观看| 麻豆成人综合网| 天堂网av成人| 免费成人在线影院| 国产一区二区亚洲| 在线精品小视频| 天堂成人免费av电影一区| 久久午夜精品一区二区| 国产日韩在线观看视频| 91精品精品| 日本在线观看不卡视频| 欧美激情aⅴ一区二区三区| 欧美日韩在线播放视频| 亚洲精品乱码| 欧美成人精品一级| 热久久免费视频| 国产超碰精品| 国产亚洲电影| 欧美午夜不卡| 中文在线免费视频| 日本不卡视频在线观看| 日韩一区网站| 欧美日韩亚洲一区| 国产高清不卡| 天堂成人免费av电影一区| 欧美日韩国产v| 伊人久久av| 福利一区和二区| 亚洲综合中文| 国产精品2023| 在线日韩成人| 久久国产日本精品| 久久99青青| 亚洲三级网站| 99综合视频| 久久久夜精品| 水蜜桃精品av一区二区| 日韩动漫一区| 久久午夜影视| 亚洲高清影视| 成人国产精品一区二区免费麻豆| 日韩福利视频一区| 午夜在线精品偷拍| 一区二区三区四区在线看| 欧美中文高清| 亚洲理论在线| 亚洲视频www| 99精品视频精品精品视频| 精品视频在线你懂得| 国产美女久久| 日韩国产精品久久久久久亚洲| 国产农村妇女精品一二区| 精品丝袜在线| 久久久久久自在自线| 精品淫伦v久久水蜜桃| 国产精品天堂蜜av在线播放| 亚洲一区二区三区四区电影 | 精品一区二区三区视频在线播放| 亚洲精品裸体| 婷婷精品在线观看| 亚洲tv在线| 欧美一区二区三区免费看| 日本亚洲视频在线| 婷婷成人av| 日韩精品导航| 久久精品72免费观看| 91福利精品在线观看| 欧美日韩亚洲国产精品| 欧美天堂一区| 美日韩一区二区三区| 久久精品五月| 欧美精品第一区| 电影91久久久| 日韩激情一区| 日韩高清成人| 99精品小视频| 亚洲国产日韩欧美在线| 99riav国产精品| 蜜臀a∨国产成人精品| 亚洲精品在线二区| 日韩午夜视频在线| 国产精品自拍区| 精品国产亚洲一区二区三区大结局| 国产一区二区三区91| www.九色在线| 视频一区中文| 欧美日韩精品一本二本三本| 伊人影院久久| 午夜久久av| 国产欧美视频在线| 国产精选在线| 美女久久久久| 久久午夜视频| 国产亚洲人成a在线v网站| 国产精品www.| 欧美xxxx中国| 激情婷婷综合| 涩涩涩久久久成人精品| 国产精品地址| 九色porny丨国产首页在线| 欧美日韩国产亚洲一区| 午夜在线播放视频欧美| 亚洲18在线| 久久精品系列| 亚洲女同中文字幕| 日韩国产欧美一区二区三区| 免费视频一区二区三区在线观看| 国产精品久久久久久久久妇女| 精品在线播放| 日本成人一区二区| 精品视频在线你懂得| 婷婷亚洲综合| 日韩精品免费一区二区夜夜嗨| 国产日韩欧美三区| 蜜桃av在线播放| 亚洲一区二区三区高清| 一区二区三区国产盗摄| 欧美黑人做爰爽爽爽| 久久九九国产| 日韩欧美中文字幕电影| 精品久久99| 亚洲免费高清| 欧美在线看片| 亚洲成av人片一区二区密柚| 蜜臀a∨国产成人精品| 老司机精品视频在线播放| 久久国产亚洲| 中文字幕一区二区三区在线视频| 国产精品亚洲欧美一级在线| 日本欧美不卡| 亚洲精品大全| 免费一级欧美片在线观看网站 | 国产精品久久久久久久久久白浆| 免费看av不卡| 免费黄网站欧美| 中文字幕在线免费观看视频| 免费视频最近日韩| 日韩av二区| 亚洲va久久| 激情久久五月| 欧美精品二区| 亚洲无线观看| 97人人精品| 日韩精品视频网|