اذهب إلى المحتوى

السؤال

نشر

أقوم بتطوير مشروع لارافيل ، وهو في الأساس موقع به وظائف لإنشاء الحسابات . الخادم يدعم فقط التشفير من نوع SHA1- وهو أمر غير آمن تمامًا. لا يمكنني الغوص في شفرة المصدر وإجراء التغييرات. إذا كان هناك أي طريقة لاستخدام SHA1 ، فسأكون ممتنًا. لقد قرأت للتو عن BCrypt ، إنه رائع ولكن لا يمكنني تغيير كود المصدر ليناسب BCrypt. تمكنت من وضع SHA1 عند التسجيل مثل هذا:

$password = $input['password'];
$password = sha1($password);

لكنني ببساطة لا أستطيع تسجيل الدخول. هل افعلها بشكل خاطئ؟ يبدو أن Laravel لن يسمح لي بتسجيل الدخول.

Recommended Posts

  • 0
نشر

السبب في ذلك أن لارافيل يعتمد على التشفير من نوع bcrypt إفتراضيا فحتى لو قمت بتسجيل المُستخدم بإستخدام sha1 عند تسجيل الدخول سيتم مطابقة كلمة المرور بإستخدام bcrypt، تدعم لارافيل ثلاث أنواع من التشفير:

"bcrypt", "argon", "argon2id"

لإضافة التشفير sha1 و إعتماده يُمكنك إستخدام الطريقة التالية:

أولاً ، سننشئ مجلدًا فرعيًا في مجلد app يسمى Libs أو Libaries أو أيًا كان ما تريد تسميته. في هذا المجلد ، قم بإنشاء مجلد يسمى CustomHash حيث نقوم بتخزين جميع أنواع التشفير الخاصة بك فيه.

يعتمد Namespace على أسماء المجلدات التي اخترتها. تقوم بإنشاء صنف Sha1Hasher داخل المُجلد الذي أنشأته و ترث من الصنف AbstractHasher و تُطبق الواجهة: HasherContract:

<?php

namespace App\Libs\CustomHash;

use Illuminate\Contracts\Hashing\Hasher as HasherContract;
use Illuminate\Hashing\AbstractHasher;

class Sha1Hasher extends AbstractHasher implements HasherContract {

  public function make($value, array $options = array()) {
    return sha1($value);
  }

  public function check($value, $hashedValue, array $options = array()) {
    return $this->make($value) === $hashedValue;
  }

  public function needsRehash($hashedValue, array $options = array()) {
    return false;
  }

}

من خلال مزود الخدمة AppServiceProvider نقوم بعمل extent للكلاس Hash في الدالة boot:

Hash::extend("sha1", function($app) {
  return new Sha1Hasher();
});

و لا تنسى إستدعاء الكلاس فوق:

use App\Libs\CustomHash\Sha1Hasher;

بعد ذلك تحتاج إلى تعديل نوع التشفير من bcrypt إلى sha1 من خلال config/hashing.php:

'driver' => 'sha1',
  • 0
نشر

سيكون عليك إعادة كتابة وحدة Hash, قم بإنشاء مجلد app / libraries وأضفه إلى autoload.classmap الخاص composer.json 

"autoload": {
    "classmap": [
        "app/libraries"
    ]
},

ستقوم بإنشاء كلاس (class) ولكين اسمه Sha1Hash مع تطبيق 

Illuminate\Hashing\HasherInterface

سنضع بداخله ثلاث دوال وهي 

make, check and needsRehash

فيكون كالتالي 

<?php
class SHA1Hash implements Illuminate\Hashing\HasherInterface {

    public function make($value, array $options = array()) {
        return hash('sha1', $value);
    }

    public function check($value, $hashedValue, array $options = array()) {
        return $this->make($value) === $hashedValue;
    }

    public function needsRehash($hashedValue, array $options = array()) {
        return false;
    }

}
?>

الآن بعد أن انتهينا من صنع ملف Sha1Hash.php, نريد استخدامه افتراضيًا بواسطة Laravel. للقيام بذلك, سننشئ Sha1HashServiceProvider,  في المسار

<project_folder\app\libraries

ونمدد Illuminate \ Support \ ServiceProvider , ونقوم بتسجيله hash component فيصبح الملف كالتالي 

<?php
class Sha1HashServiceProvider extends Illuminate\Support\ServiceProvider {
    public function register() {
        $this->app['hash'] = $this->app->share(function () {
            return new SHA1Hash();
        });

    }

    public function provides() {
        return array('hash');
    }
}
?>

في المسار التالي 

app/config/app.php

نضيف تحت providers التالي 

'Sha1HashServiceProvider'

و إزالة 

'Illuminate\Hashing\HashServiceProvider'

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...