سؤال

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

ومع ذلك، هناك شيء واحد يربكني. يبدو أنني أتذكر أن نصح addslashes أفضل من htmlentities عند صدى البيانات التي أدخلتها المستخدم مرة أخرى للمستخدمين لحماية بياناتهم، ولكن يبدو addslashes هو واحد مع الضعف. هل هذا صحيح، أو أتذكر بشكل غير صحيح؟

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

المحلول

هناك سياقات مختلفة لبياناتك. يحتاج سياق إدراج البيانات إلى قاعدة البيانات إلى أن يتم الضغط بشكل مختلف عن سياق تقديم HTML / XML أو حتى رسالة بريد إلكتروني.

يجب إهمال البيانات التي تذهب إلى DB في جميع التعليمات البرمجية الجديدة لصالح البيانات المعدة. أي شخص يخبرك بخلاف ذلك هو أن تفعلك مفهومة كبيرة.

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

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

نصائح أخرى

إنها أدوات مختلفة لأغراض مختلفة.

MySQLI_REAL_ESCAPE_STRING يجعل البيانات آمنة للإدراج في MySQL (ولكن الاستفسارات المخففة أفضل).

تستخدم HTMLENTITITITITITITITIATITITITITS آمنة للبيانات لإخراج مستند HTML

addslashes يجعل البيانات آمنة لبضع حالات أخرى، ولكنها غير كافية ل MySQL

يمكنك أيضا استخدام بدو ليبس الذي يفعل معظم الهروب من أجلك، في حالة استخدام PHP5 على الخوادم.

على تردد الظهر كنت شخصيا أفضل HTMLSPecialChars، ولكن قد يصحمني المرء

نعم، استخدم mysqli_real_escape_string أو مكتبة مثل PDO على جميع مدخلات المستخدم. عند الترويض، استخدم HTMLENTITIONTITITITITITITITITITITITITITS مع ent_quotes كمعلمة ثانية، لأنه يهرب من جميع الأحرف المعمول بها إلى كيانات HTML الخاصة بهم، بما في ذلك علامات الاقتباس.

ملاحظة: يجب تجنب استخدام HTMLENTIVITITITITITITITITIONS () في مستند مشفر UTF-8. يرى:

الانتباه إلى (نقلت من phpwact.org.):

مع متصفحات الويب الحديثة ودعم Widespead ل UTF-8، لا تحتاج إلى HTMLENTITIONTIONTITITIONITIONS لأن كل هذه الأحرف يمكن تمثيلها مباشرة في UTF-8. والأهم من ذلك، بشكل عام، فقط المتصفحات تدعم أحرف HTML الخاصة - محرر نصي عادي، على سبيل المثال، غير مدرك للكيانات HTML. اعتمادا على ما تفعله، قد يقلل استخدام Htmlentistics من قدرة الأنظمة الأخرى على "تستهلك" المحتوى الخاص بك.

أيضا (غير مؤكد ولكن الأصوات معقولة - من تعليق anon هنا)، لا تعمل كيانات الأحرف (الأشياء مثل »أو -) عند تقديم مستند كمستند كأي تطبيق / XML + XHTML (ما لم تحددها). لا يزال بإمكانك الابتعاد عن النموذج الرقمي.

حل آخر مثير للاهتمام بالنسبة ل PHP 5.2 وما فوق هو استخدام ملحق المرشح: http://www.php.net/manual/en/book.filter.php.

يسمح لك بالتحقق من صحة وتطهير مدخلات المستخدم. هناك العديد من المرشحات المدمجة المتوفرة ويمكن دمجها مع الأعلام لتعديل سلوكهم. بالإضافة إلى ذلك، يمكن أيضا استخدام مرشحات Heese للتحقق من صحة / تعقيم Ints، Floats، رسائل البريد الإلكتروني، تعبيرات منتظمة محددة.

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

لا يمكنك الحصول على وظيفة واحدة "هروب" ونتوقع أن تعمل طوال الوقت. هناك هجمات مختلفة تتطلب إجراءات الصرف الصحي المحددة. الطريقة الوحيدة لفهم هذا المفهوم هي كتابة بعض الكود الضعيف ثم استغلالها. كتابة رمز Exploit أمر حيوي لفهم أي نظام أمن.

على سبيل المثال، يكون هذا الاستعلام عرضة لحقن SQL:

$host=htmlspecialchars($_GET[host],ENT_QUOTES);
$name=htmlspecialchars($_GET[name],ENT_QUOTES);
mysql_query("select * from user where Host='$host' and Name='$name' ");

يتسغل:http: //localhost/sqli_test.php؟& name =٪ 20sleep (20) -٪ 201

أفضل وظيفة الهروب ل mysql هي mysqli_real_escape_string () ولكن هذا يمكن أن يفشل:

mysql_query("select * from user where id=".mysqli_real_escape_string($_GET[id]));

استغلال:http: //localhost/sqli_test.php؟ معرف = 1٪ 20or٪ 20sleep (20)

في الواقع، فإن أفضل طريقة لرعاية حقن SQL لا تدعو إلى وظيفة هروب، منها باستخدام استئراض ADODB المعلمة لحقن SQL. استخدم HTMLSPecialCahrs ($ var، ent_qutoes) ل xss. إقرأ ال owasp أفضل 10. لأن هناك أكثر بكثير أكثر مما يمكن أن يحدث خطأ في أمان تطبيق الويب.

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