أنا أتعلم PHP لوحدي و أصبحت على بينة من strip_tags() وظيفة.هذا هو السبيل الوحيد لزيادة الأمن ؟

StackOverflow https://stackoverflow.com/questions/2258808

  •  20-09-2019
  •  | 
  •  

سؤال

أنا جديدة على PHP و أنا أتابع البرنامج التعليمي هنا:الرابط

انها مخيفة جدا التي يمكن للمستخدم كتابة كود php في مدخلا وأساسا المسمار موقع الويب الخاص بك ، أليس كذلك ؟

حسنا, الآن أنا بجنون العظمة قليلا و أنا أفضل وتعلم أفضل الممارسات الأمنية الحق قبالة الخفافيش من محاولة حشر منهم في مرة واحدة لدي بعض العادات في لي.

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

ما طريقة أخرى يمكنني منع الاشكالات على موقعي ؟ :D

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

المحلول

وهناك العديد من الأشياء أن نأخذ في الاعتبار عند تطوير PHP التطبيق ، strip_tags() يساعد فقط مع واحد من هؤلاء.فعلا strip_tags(), في حين فعالة ، بل قد تفعل أكثر من اللازم:تحويل خطير وربما مع الشخصيات htmlspecialchars() يجب أن تكون الأفضل ، تبعا للحالة.

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

الإخراج سهلة, كل ما يرسل التطبيق إلى المتصفح هو الإخراج ، وذلك باستخدام htmlspecialchars() أو أي الهروب وظيفة في كل مرة كنت إخراج البيانات لم تكتبه بنفسك.

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

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

عناية خاصة إذا كنت تتعامل مع قاعدة البيانات ، يجب أن تدفع إلى حقن SQL:هذا النوع من الهجوم تعتمد على لك غير صحيح بناء سلاسل الاستعلام يمكنك إرسال إلى قاعدة البيانات ، حتى أن المهاجم يمكن تزويرها محاولة تنفيذ الخبيثة التعليمات.يجب عليك دائما استخدام الهروب من وظيفة مثل mysql_real_escape_string() أو الأفضل استخدام البيانات المعدة مع على تمديد mysqli أو باستخدام شركة تنمية نفط عمان.

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

HTH

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

نصائح أخرى

وstrip_tags ليست هي أفضل شيء لاستخدام حقا، أنها لا تحمي في جميع الحالات.

وHTML تنقية: http://htmlpurifier.org/

وهو خيار جيد الحقيقي لمعالجة البيانات الواردة، ومع ذلك فإنه في حد ذاته لا يزال لن تناسب جميع حالات الاستخدام - ولكن من المؤكد انها جيدة نقطة البداية

يجب أن أقول أن البرنامج التعليمي لقد ذكرت هو قليلا مضللة حول الأمن:

من المهم أن نلاحظ أن كنت لا تريد أن تعمل مباشرة مع $_GET & $_POST القيم.دائما إرسال قيمة إلى متغير محلي ، و العمل معها هناك.هناك العديد من الآثار الأمنية المعنية مع القيم عند الوصول مباشرة (أو إخراج) $_GET & $_POST.

وهذا هو هراء.نسخ القيمة إلى متغير محلي لا أكثر أمنا من استخدام $_GET أو $_POST المتغيرات مباشرة.

في الواقع, ليس هناك شيء غير آمنة بطبيعتها عن أي بيانات.ما يهم هو ما يمكنك القيام به.هناك أسباب مشروعة تماما لماذا قد يكون لديك $_POST المتغير الذي يحتوي على ; rm -rf /.هذا على ما يرام بالنسبة إخراج على صفحة HTML أو تخزينها في قاعدة البيانات ، على سبيل المثال.

المرة الوحيدة انها غير آمنة عندما كنت تستخدم الأوامر مثل system أو exec.وهذا هو الوقت الذي كنت بحاجة للقلق حول ما المتغيرات التي تستخدمها.في هذه الحالة, ربما كنت ترغب في استخدام شيء مثل البيضاء ، أو على الأقل تشغيل القيم الخاصة بك من خلال escapeshellarg.

وبالمثل مع إرسال استعلامات قواعد البيانات لإرسال HTML إلى المتصفحات, وهلم جرا.الهروب من البيانات قبل إرسالها إلى مكان آخر باستخدام الهروب طريقة الوجهة.

وstrip_tags يزيل كل قطعة من أتش تي أم أل. تستند حلول أكثر تطورا على القائمة البيضاء (أي السماح علامات محددة أتش تي أم أل). مكتبة إدراجه في القائمة البيضاء جيدة هو htmlpurifyer http://htmlpurifier.org/

وبطبيعة الحال على الجانب قاعدة بيانات من الأشياء استخدام وظائف مثل mysql_real_escape_string أو pg_escape_string

حسنا، ربما أكون مخطئا، ولكن ... في كل الأدب، لقد قرأت، والناس يقولون انها أفضل بكثير لhtmlspellchars الاستخدام.

وبالإضافة إلى ذلك، من الضروري بدلا من البيانات المدلى بها الإدخال. (لكثافة العمليات على سبيل المثال، إذا كنت متأكدا من أنه من هوية المستخدم).

حسنا، قبل ذلك، عندما عليك أن تبدأ باستخدام قاعدة بيانات - استخدام mysql_real_escape_string بدلا من mysql_escape_string لمنع حقن SQL (في بعض الكتب القديمة الذي كتبت mysql_escape_string لا يزال)

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