علي الكاسر نشر 17 نوفمبر 2021 أرسل تقرير نشر 17 نوفمبر 2021 اريد تعديل هذا الكود من قبل أحد المبرمجين المحترفين في php الكود يعمل على إنشاء رمز توكين ، ولكن ناشر الكود قال أن الرمز ضعيف وإن نشره للكود كان كتجربة وتعليم . هل يمكن لأحد ما أن يعدله ليكون قادرا على إنشاء رمز توكين قوي وصعب التخمين . و أيضا إضافة الحماية أو أي شي يحسن من قوته وشكرا مسبقا . <?php function base64($data) { return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); } # Filtering (URLEncode) $whoami = '1337r00t'; // Client's User $headers = base64(json_encode(['alg'=>'HS256','typ'=>'JWT'])); // Headers $payload = base64(json_encode(['WhoAmI'=>$whoami,'iat'=>time(),'id'=>1223])); // Payload $secret = 'Key1234'; // Secret Key $signature = base64(hash_hmac('SHA256',"$headers.$payload",$secret,true)); // Signature $jwt = "$headers.$payload.$signature"; // JWT echo $jwt. '<br>'; #eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJXaG9BbUkiOiIxMzM3cjAwdCIsImlhdCI6MTU1Njk2MzY3Mn0.1_gqGBADyt1MfF59xG8PTbg49vM0XE6r0Ed7yXbSAVs ?> 1 اقتباس
1 Adnane Kadri نشر 17 نوفمبر 2021 أرسل تقرير نشر 17 نوفمبر 2021 عموما ، يشترط أن يكون رمز التوكين الذي تحاول توليده امنا من الناحية التشفيرية cryptographically secure . إذ لا يميل الكثير إلى توليد سلسلة نصية عشوائية عن طريق دوال من مثل rand أو uniqid أو غيرها كونها لم توجد لعمليات التوثيق التي تتطلب مستوى أعلى من الحماية والأمان ، لأن هاته نفسها مرتكزة على مفاهيم أخرى من مثل وقت إستدعاءها ، مما يجعل عملية فكرة التركيز عليها هشة. راجع قسم الوصف من توثيق الدالة uniqid() في PHP : اقتباس تحصل الدالة uniqid() على معرف فريد مع إمكانية إضافة سابقة له استنادًا إلى الوقت الحالي بالميكروثانية. فضلا عن الإنطلاق من سلسلة نصية معلومة مثل تلك التي تخزنها في المتغير whoami . وكحلول أكثر أمانا توفر PHP بدائل تصفها بأنها " آمنة تشفيريا cryptographically secure " . فمكتبة PHP 7 القياسية مثلا توفر وظيفة random_bytes التي تقوم بتوليد وحدات بايت عشوائية آمنة. ستحتاج بعد ذلك تحويل وحدات البايت هاته إلى hexadecimal عن طريق الوظيفة bintohex . مثال : <?php $bytes = random_bytes(60); $token = bin2hex($bytes); echo $token; /* 8063741bbb1dd099aa059e3ee1851bdb8a27a7d1 b22e962801c76b10dc0107828ec679fe93fac698 6c93d6e863542e69e029f5db08bf367ac6de66ab */ يمكنك أيضا الإستعانة بمكتبات أكثر أمانا وأكثر إلتفاتا لهذا الجانب ، من مثل مكتبات OAuth في PHP التي توفر التابع generateToken عن طريق مزود خدمتها OAuthProvider كالتالي : $p = new OAuthProvider(); $t = $p->generateToken(60); أو ربما مكتبات وحزما أخف حجما من مثل الغنية عن التعريف jwt . اقتباس
السؤال
علي الكاسر
اريد تعديل هذا الكود من قبل أحد المبرمجين المحترفين في php
الكود يعمل على إنشاء رمز توكين ، ولكن ناشر الكود قال أن الرمز ضعيف وإن نشره للكود كان كتجربة وتعليم .
هل يمكن لأحد ما أن يعدله ليكون قادرا على إنشاء رمز توكين قوي وصعب التخمين . و أيضا إضافة الحماية أو أي شي يحسن من قوته وشكرا مسبقا .
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.