• 0

تشفير حقل id في الform

نفترض ان عندي 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

يمكنك تشفير ال 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

لا حاجة لتشفير الـ 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;
   }
    
تمّ تعديل بواسطة Adnane Kadri
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

هذه تسمى مشكلة صلاحيات و لاتحل عن طريق تشفير 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 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن