سؤال

ما هي الشخصيات الخطرة التي ينبغي أن تكون محل في إدخال المستخدم عند المستخدمين إدخال سيتم إدراجها في MySQL query ؟ أنا أعرف عن اقتباسات, ونقلت مزدوجة ، .هل هناك غيرها ؟
(ليس لدي خيار استخدام موصل الذكية التي تقبل المعلمات لذلك يجب أن بناء الاستعلام عن نفسي و هذا سيتم تنفيذها في لغات البرمجة متعددة ، بما في ذلك بعض تلك الغامضة حتى حلول مثل mysql_real_escape_string في PHP غير صالحة)

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

المحلول

mysql_real_escape_string() من mysql.com مستندات:

سلسلة من هو ترميز هرب سلسلة SQL, مع الأخذ بعين الاعتبار الطابع الحالي مجموعة الاتصال.والنتيجة هي وضعها في أن إنهاء null byte هو إلحاق.الأحرف المشفرة هي NUL (ASCII 0), " ", " ", "\", "'", """, والتحكم-Z (انظر القسم 8.1, "قيم حرفية").(بالمعنى الدقيق للكلمة ، الخلية يتطلب فقط أن مائل و اقتبس شخصية تستخدم اقتباس السلسلة في الاستعلام يكون هرب.هذه الوظيفة ونقلت الشخصيات الأخرى لجعلها أسهل في القراءة في ملفات السجل.)


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

من http://cognifty.com/blog.entry/id=6/addslashes_dont_call_it_a_comeback.html:

AS = addslashes()  
MRES = mysql_real_escape_string()
ACS = addcslashes() //called with "\\\000\n\r'\"\032%_"

ميزة MRES ACS
escapes quote, double quote, and backslash      yes    yes     yes
escapes LIKE modifiers: underscore, percent     no     no      yes
escapes with single quotes instead of backslash no     yes*1   no
character-set aware                             no     yes*2   no
prevents multi-byte attacks                     no     yes*3   no

نصائح أخرى

ما هي اللغات التي تحتاج إلى دعم؟ هو أفضل بكثير لاستخدام الإبراء المدمج في اللغة ومن أن تكتب بنفسك.

وتحرير: وإذا نظرنا mysql_real_escape_string على php.net:

<اقتباس فقرة>   

وmysql_real_escape_string() يدعو mysql_real_escape_string وظيفة مكتبة الخلية، والتي بإلحاق الخطوط المائلة العكسية إلى الأحرف التالية: \x00، \n، \r، \، '، " و\x1a

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