سؤال

هل هم أقل عرضة للحقن SQL من فعل الاشياء مثل mysql_query("SELECT important_data FROM users WHERE password = $password")؟

هل كانت مفيدة؟

المحلول

وهم أكثر أمنا من ما تقومون به. الاستعلام الخاص بك من نشر SQL الخام إلى ديسيبل وهو ما يعني أن المعلمات الخاصة بك لا تعامل على أنها معلمات لغة الاستعلامات البنيويه ولكن كما مزود سهل القديمة.

وهنا هو ما أعنيه.

ومع prococedure تخزين متغير كلمة المرور لا يمكن أن يكون SQL، فإنه يجب أن يكون قطعة من المعلومات تتطلع نظام. في المثال الخاص بك ما أرسلت بالفعل إلى ديسيبل هو

وSELECT * FROM العضو حيث كلمة المرور = ( 'كلمة السر الخاصة بك هنا "- $ كلمة متغير) ..... حتى يمكن للشخص أن يفعل شيئا من هذا القبيل

وSELECT * FROM WHERE المستخدم كلمة المرور = ( 'كلمة السر هنا'؛ SELECT * FROM العضو - $ متغير كلمة المرور).

وأو الأسوأ من ذلك:

وSELECT * FROM WHERE المستخدم كلمة المرور = ( 'كلمة السر الخاصة بك هنا'؛ DROP قاعدة بيانات Database_Name - $ كلمة متغير)

وسوف إجراء SQL غير المخزن الحيوية لا يسمح بذلك، لأن معلمة الإدخال يتم تنفيذ SQL كما إضافية.

وParametrized SQL لا تأخذ الرعاية من هذا، ولكن الإجراءات المخزنة من الناحية الفنية لا تزال قليلا أكثر أمنا، لأن معلومات المستخدم الوصول في الجدول لا يحتاج الوصول للقراءة. فإنه يحتاج فقط لتكون قادرة على تنفيذ الإجراء المخزن. حسب حاجتك هذا قد أو قد لا تأتي في اللعب.

نصائح أخرى

وليس بالضرورة، يمكن أن تقوم به سلسلة سلسلة داخل منه، وسوف تعرض تكون هي نفسها. إذا كنت تستخدم SQL ديناميكية مع المتغيرات المعلمة (أي سلسلة سلسلة لإنتاج SQL) تريد ان تكون الى حد ما محمية بشكل جيد.

وطالما كنت تستخدم المعلمات وعدم استخدام سلسلة سلسلة القيم التي أدخلها المستخدم، لن يكون هناك خطر حقن SQL. الإجراءات المخزنة بعض الشيء "أكثر أمنا" في هذا الجانب، لأنهم نشجعك على استخدام المعلمات. ولكن إذا كان في إجراء تفعل شيئا مثل

EXECUTE 'SELECT important_data FROM users WHERE password = ' + @password

وبعد ذلك عليك أن تكون العودة إلى المربع 1 والضعفاء كثيرا لحقن SQL.

وبالإضافة إلى ذلك، هناك شيء من هذا القبيل "بيانات معدة" التي لا الإجراءات المخزنة، ولكن يمكن أيضا استخدام المعلمات. وهم بالتالي يمكن استخدامها لتجنب حقن SQL أيضا.

لا يوجد التقنيات الآمنة. لا يمكن إلا أن تقنيات يمكن استخدامها بطرق آمنة أو غير آمنة.

وقال ان الإجراءات المخزنة تتطلب ترميز قليلا أكثر إبداعا للسماح حقن SQL - والذي يحدث مع ذلك. لا شيء يمنعك من وصل سلاسل فيها، في أي محرك قاعدة بيانات SQL والتي أنا على علم.

وإذا معلمات بشكل صحيح وانك لم تفعل مزود الديناميكي ومن ثم فهي أكثر أمنا، وسوف تستفيد أيضا من تنفيذ خطة إعادة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top