محمود موسى2 نشر 28 أبريل 2021 أرسل تقرير نشر 28 أبريل 2021 نفترض ان عندي items في جدول بالموقع وبنهاية كل صف في الجدول يوجد زر لتعديل الitem عند الضغط على الزر يحولني لصفحة تعديل الitem التي بها form يحتوي على اسم الitem وال description وحقلid من نوع hidden فكما تعلمون اذا قام احد بفتح الpage source الخاصة بالموقع سيجد الid مكشوف له ويستطيع تعديله كما تعلمون انه عندما استقبل بيانات الform اقوم بعمل جملة update على البيانات المدخلة عندما يساوي حقل الid المُستقبل نفس الحقل بالداتا بيز أي:- UPDATE items SET item = ?, description = ? WHERE id = ? // bind id with $_POST['id'] فإذا كان الid الفعلي = 1 وقام الشخص بتعديل الid من الpage source وجعله يساوي 2 مثلا فسيتم تعديل item غير مسموح له بتعديلها.. السؤال هو.. هل يوجد أي طريقة لتشفير الid في الhidden input وفك تشفيرها عند استقبالها مرة اخرى في الphp ام لا؟ اريد تشفير حقل الid وإعادة فك تشفيره مرة اخرى عند استقباله ب php ارجو ان يكون الحل بإستخدام php او php laravel 1 اقتباس
0 محمد صقر3 نشر 28 أبريل 2021 أرسل تقرير نشر 28 أبريل 2021 يمكنك تشفير ال id في دالة ال edit ويكون مشفر وتضع قيمته المشفره ك hidden input و عندما تقوم بعمل form submit قم بفك التشفير عن ال id واستخدامه <?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Crypt; class UserController extends Controller { public function edit(Request $request, $id) { $encryptedId = Crypt::encryptString($id); .... } // يكون ال id مشفر public function update(Request $request, $id) { $userId = Crypt::decryptString($id); .... } } 1 اقتباس
0 Adnane Kadri نشر 28 أبريل 2021 أرسل تقرير نشر 28 أبريل 2021 (معدل) لا حاجة لتشفير الـ ID لحل المشكلة فعليا , عوضا عن ذلك يمكنك إنشاء دالة أو middleware يقوم بالتحقق من ملكية العنصر item قبل عمل أي تعديلات عليه . مثال عملي : <?php class YourController extends Controller { public function editItem(Request $request ,Item $item){ if(! $this->isOwner($item)){ return 'لا يمكنك تعديل العنصر'; } // تكملة العملية } private function isOwner($item){ if(auth()->user()->id == $item->user_id){ return true; } return false; } تم التعديل في 28 أبريل 2021 بواسطة Adnane Kadri 1 اقتباس
0 محمد أيت لعرايك نشر 28 أبريل 2021 أرسل تقرير نشر 28 أبريل 2021 هذه تسمى مشكلة صلاحيات و لاتحل عن طريق تشفير id بل نقوم بعمل Middleware تقوم بالتحقق من صلاحيات المستخدم يمكنعمل ذلك على النحو التالي: في المتحكم الخاص بك قم بوضع دالة التحقق على دالة التعديل class Foo extends Conroller { public function __construct() { $this->middleware('post-edit', ['only' => ['edit']]); // يتم التحقق من الصلاحيات قبل تنفيد الأمر بالتعديل } public function edit(Request $request, $id) { //تعديل المقال } } بعد ذلك نتأكد من الصلاحيات بواسطة post-edit middleware <?php namespace App\Http\Middleware; use Closure; class PostEditMiddleware { public function handle($request, Closure $next) { if(Auth::user()->id == $request->input('user_id')) // نتحقق أن العنصر خاص بالمستخدم ولديه صلاحية التعديل عليه return $next($request); return Response::make("Unauthenticated", 401); // في حالة ليس لديه الصلاحية نقوم بإسترجاع رسالة عدم الصلاحية } } 1 اقتباس
السؤال
محمود موسى2
نفترض ان عندي items في جدول بالموقع وبنهاية كل صف في الجدول يوجد زر لتعديل الitem
عند الضغط على الزر يحولني لصفحة تعديل الitem التي بها form يحتوي على اسم الitem وال description وحقلid من نوع hidden
فكما تعلمون اذا قام احد بفتح الpage source الخاصة بالموقع سيجد الid مكشوف له ويستطيع تعديله
كما تعلمون انه عندما استقبل بيانات الform اقوم بعمل جملة update على البيانات المدخلة عندما يساوي حقل الid المُستقبل نفس الحقل بالداتا بيز أي:-
فإذا كان الid الفعلي = 1 وقام الشخص بتعديل الid من الpage source وجعله يساوي 2 مثلا فسيتم تعديل item غير مسموح له بتعديلها..
السؤال هو.. هل يوجد أي طريقة لتشفير الid في الhidden input وفك تشفيرها عند استقبالها مرة اخرى في الphp ام لا؟
اريد تشفير حقل الid وإعادة فك تشفيره مرة اخرى عند استقباله ب php
ارجو ان يكون الحل بإستخدام php او php laravel
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.