亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用路由參數和隱藏輸入值信任用戶

使用路由參數和隱藏輸入值信任用戶

PHP
慕無忌1623718 2022-07-02 16:31:34
我正在用 laravel 創建一個學校管理系統軟件,這個項目恰好是我的第一個大項目,用于商業用途。沒有人監督這項工作(所以你看我在這里真的需要建議)。所以我遇到的問題是何時信任用戶輸入以及何時在另一個表中使用模型之前檢查模型是否存在。例如,在將 student_id 插入“attendances”表之前檢查“users”表中是否存在“student_id”。這個問題也適用于我想在其他表中持久化模型的每隔一段時間。作為說明,我拿出了一部分用于讓學生參加的代碼。HTML<form method="POST" action="{{route('daily.attendance')}}">    @csrf    <input type="hidden" name="section_id" value="{{$section_id}}">    <input type="hidden" name="semester_id" value="{{$semester_id}}">@foreach ($sections as $section) @foreach ($section->users as $student)                  <input type="checkbox" name = "present[]" value = "{{$student->id}}" class = "present">            <input type="hidden" name = "students[]" value = "{{$student->id}}">  @endforeach @endforeach<button type="submit" class="btn btn-primary" >{{ __('take attendance') }}</button>      </form>因此,即使我為 $section_id 和 $semester_id 使用了隱藏輸入,我知道用戶(管理員)可以通過使用他的瀏覽器控制臺更改這些值,然后發送表單。想象一下管理員有意或無意(顯示for的路由是這樣的"daily/student/section/{section_id}') 將 $section_id 或 $semester_id 更改為與sections 表和Semesters 表中的任何模型都不對應的值。繁榮?。?!他或她(管理員)參加了一個甚至不存在的部分或學期,這并不好,因為它破壞了數據庫的完整性。所以問題是我應該信任管理員還是應該在插入“出席”表之前檢查相應表中是否存在 $section_id 和 $semester_id(這樣做也會增加腳本結束的時間)。還查看 php 代碼,student_id 值也可以從 html 中被篡改,并且您會看到代碼循環通過標記為在場的學生和標記為缺席的學生的數組,我是否還應該檢查 $student_id 是否存在于“用戶”中
查看完整描述

1 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

規則總是說永遠不要信任用戶,特別是在談到數據完整性時。我建議嘗試 laravel 的驗證方法: https ://laravel.com/docs/6.x/validation#rule-exists

但是,如果性能是您首先關心的問題,我會在首次請求出勤頁面時將 userIds 和 sectionIds 緩存在 redis 哈希中,然后檢查例如 student_id 是否在緩存的 user_ids 中如果您想查看 Laravel 的緩存: https ://laravel.com/docs/5.7/cache#retrieving-items-from-the-cache


查看完整回答
反對 回復 2022-07-02
  • 1 回答
  • 0 關注
  • 116 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號