• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
سوال درمورد نیاز یا عدم نیاز به حذف بعضی کاراکترها باوجود Escape صحیح و کامل
#1
میگم اگر از متدهای Escape در همه جا استفاده کنیم، مثلا از mysql_real_escape_string موقع درج در دیتابیس، و از تابع htmlspecialchars موقع درج در متن صفحه، آیا بازم خطری هست؟ آیا کاراکترهای خاصی بازهم خطرناک هستن و باید کلا حذف بشن؟
مثلا وقتی کاربر کامنت میده، یا موقع انتخاب نام کاربری، آیا ضرورت داره کاراکترهای خاصی رو غیرمجاز بدونیم و حذف کنیم؟ مثلا کاراکتر نال (0x00) و امثالهم اگر هست.
موقع درج در دیتابیس که ضرری نمیزنن. ولی موقع ارسال به مرورگر حتی باوجود Escape کردن صحیح میتونن خطرناک باشن و چرا؟

پ.ن:
بعضیا میگن من خیلی ادعام میشه.
اما اگر اینطور بود که اینطور تاپیک نمیزدم و اینطور سوالات رو به اینصورت مطرح نمیکردم.
من فقط صریح هستم و یه محقق. و هیچ چیزی رو بدون دلیل و سند کافی قبول نمیکنم یا اینطور بگم که از گیر دادن بهش نمیگذرم تا واقعا بفهمم و مطمئن بشم. باید علت رو فهمید و مکانیزم رو درک کرد.
ضمنا بارها مواردی رو دیدم که ادعاها و روشهای اشتباه مطرح شدن. اگر انسان به این چیزها گیر نده و دنبال سند و دلیل نباشه، هیچوقت متوجه نقض و ضعف و اشتباه اونا نمیشه.
یادمون نره ندانستن عیب نیست. نپرسیدن عیبه. گیر دادن عیب نیست. گیر ندادن عیبه Big Grin
صریح بودن و سمج بودن در مسائل تخصصی و علمی اونم در یه محیط مجازی چه اشکالی داره؟
سعی کنیم نازک نارنجی نباشیم و از دیگران انتظارات بیجا نداشته باشیم.
من تو یه چیزایی اطلاعات و احاطه دارم، خب دارم، تو یه چیزایی ندارم، خب میگم بلد نیستم و میام میپرسم و همفکری میکنم. از هیچکس ناراحت نمیشم بگه من بی سواد هستم. برام مهم نیست. تنها چیزی که ناراحتم میکنه اینه که راهم برای پیشرفت و قوی تر شدن بسته بشه (واسه همین وقتی فرومهایی رو که توش میتونم آزادانه با دیگران ارتباط برقرار کنم فیلتر میکنن خیلی ناراحت میشم!!).

------------

توضیح: این متن در اصل واسه فروم برنامه نویس بود ولی گفتم اینجا هم درج کنم مفیده. به خودتون نگیرید Wink
  پاسخ
تشکر شده توسط : paull
#2
حتما مقدار ورودی رو ولیدیت کن - اگر باید Int باشه پس مطمئن شو مقدار int هست اگر big int باید باشه پس حتما برررسی کن big int باشه و ... .
mysql_real_escape_string ورودی رو از کاراکترهای خاص پاک می کنه ( من هیچ چیزی در مورد اینکه این تابع نتونه جلوی کاراکترهای خاص رو بگیره پیدا نکردم

htmlspecialchars و متدهایی مثل strip_tags یک سری باگهایی رو داشتن و الان خیلی امن شدن . یوشا رو یادمه که چقدر از strip_tags توی نسخه های قدیمی باگ گرفت . چون یه سری کاراکترهایی رو می فرستادن که می تونست از این فیلتر ها رد بشه . یه مقدار در موردش جستجو کنید گزارشات رو پیدا می کنید

حالا اگر از کاربر خواستیم ورودی HTML بگیریم و از یک ویزیویگ استفاده کرده بودیم اون وقت چی؟
  پاسخ
تشکر شده توسط : paull
#3
راستی شما هر جا که می دونید می تونید کمک کنید یا می تونه کمک کنه می تونید مطلب رو قرار بدید.
  پاسخ
تشکر شده توسط :
#4
ببین یکی از خفن های امنیتی در اینمورد چی میگه:
نقل قول:نه کاراکترهای خاص مثل نال جاهای دیگه خطرناکن اینجا توی خروجی اچ تی ام ال چندان تاثیری ندارن... لااقل چیزی که من بدونم..

(۱۳۹۰ اردیبهشت ۰۳, ۱۰:۵۳ ق.ظ)admin نوشته: حالا اگر از کاربر خواستیم ورودی HTML بگیریم و از یک ویزیویگ استفاده کرده بودیم اون وقت چی؟
چطور؟ مگه چه مشکلی کجاش هست؟


  پاسخ
تشکر شده توسط :
#5
خب مثلا ما می خواییم از کاربر کد html بگیریم. اون وقت کاربر میاد و یه سری کدهای جاوااسکریپت هم بعضی جاها می زاره. که بیشتر دوست داره کوکی کاربر رو به یه url دیگه بفرسته.
منظورم این هست
  پاسخ
تشکر شده توسط : paull
#6
من نمیدونم و برام صورت سوال هم مبهمه، چون با ادیتورهای ویزیویگ کار نکردم تاحالا.
ولی فکر میکنم یه راهی باید توش گذاشته باشن که کمک بکنه ورودیهای خطرناک کاربر رو شناسایی کنیم. شایدم نه البته. اگر این کار سمت کلاینت انجام بشه نمیشه بهش اتکا کرد.
شاید خب ما باید بیایم فقط انواع تگها و مقدارهایی رو که مجاز هستن اجازه بدیم و بقیه رو حذف کنیم. مثلا طرف فقط از تگ img باید استفاده کرده باشه نه تگ script و ضمنا مثلا تگ img هم نمیتونه مقدار src با متد جاوااسکریپت داشته باشه و از این طور چیزا.
اما بنظرم فیلتر کردنش کار مشکل و ظریفی هست. آیا کتابخانه ای تابعی چیزی نیست براش؟
ضمنا مثلا اینهمه نرم افزار معروف پس چیکار میکنن؟ مثلا ویبالتین چیکار میکنه؟

نقل قول:نه کاراکترهای خاص مثل نال جاهای دیگه خطرناکن اینجا توی خروجی اچ تی ام ال چندان تاثیری ندارن... لااقل چیزی که من بدونم..
البته بخاطر تکمیل مطلب عرض کنم که من نمیگم وجود کاراکترهایی مثل نال رو در چیزهایی مثل نام کاربری اجازه بدیم. فقط میخواستم بدونم از نظر فنی خطرناک هستن یا نه.
این از نظر اختلال در کارکرد اجزای برنامه های سمت سرور و مرورگر احتمالا خطری نداره، اما اگر اینطور کاراکترها رو در چیزهایی مثل نام کاربری اجازه بدیم، مثلا یه طرفی میاد یه آدی درست میکنه مشابه آیدی بنده و فقط تهش یکی از این کاراکترها رو که احتمالا در مرورگر اصلا دیده نمیشه یا به سختی و تنها با دقت و آگاهی فنی قابل تشخیص هست اضافه میکنه. اینطوری آیدی من و اون طرف در ظاهر یکی بنظر میاد و طرف میتونه خودش رو جای من جا بزنه و مثلا برای دیگران پیام خصوصی بفرسته و وانمود کنه که از طرف من بوده و سوء استفاده کنه.
بنابراین بنظر من بعضی کاراکترها رو در چیزهایی مثل نام کاربری و موارد مشابه دیگه نباید اجازه داد.
مثلا من خودم کاراکتر New Line و Tab رو هم در نام کاربری اجازه نمیدم (اما مثلا در پسورد اجازه میدم)، چون اینا در HTML بصورت یک فاصله نشون داده میشن که اغلب در صفحات از فضای خالی و متن اطراف قابل تشخیص نیستن.
  پاسخ
تشکر شده توسط : paull
#7
خواستم به همین برسیم که مشکلات در این موضوع خیلی زیاد هست
من از HTMLPurifier استفاده می کنم
لپ مطلب من این بود که اگر بخواییم ورودی کاربر html باشه . مثلا توی کامنتها بخواییم html وارد کنه . خب اینجا شما نمی تونی htmlspecialchars استفاده کنی. اینجا حملات xss خیلی راحت انجام میشه
ویبولیتن و یا همین mybb از bbcode استفاده می کنن که این مشکلات رو نداره. البته اگر بری و لیست باگها رو نگاه کنی بیشتر حملات از طریق همین ورودی انجام میشه
  پاسخ
تشکر شده توسط : vejmad
#8
درمورد سیاست انتخاب نام کاربردی اون دوستم که وارده اینطور میگه:
نقل قول:کاری که میکنی از پایه درسته ولی منطقی اینه که اگر به هویت دار بودن یکی از المانهای کاربرات مثل ای دی یا آواتار یا اینجور چیزا اهمیت میدی, باید راه حلهای سختگیرانه ای برای ثبت نام پیش بگیری نه اینکه با اتکا به فلسفه ی ایجاد هویت، برای کاربران تصور این ایجاد بشه که هویت سازی پروسه ی سختگیرانه ای داره ولی در عمل این سختگیری بر پایه ی بلک لیست باشه. یه نگاه به ثبت نام کاربری در سایتی مثل یاهو بنداز... فقط کاراکترهای خاص؛ فقط از یه رنج طول خاص فاقد هرگونه از کلمات لیست سیاه. این یه سیاست سختگیرانه است که واقعا مشابه سازی و فیشینگ هویتی رو سخت میکنه...
بنظرم گفتهء ارزنده ای هست. منکه قانع شدم.
باید برای چیزهایی مثل نام کاربری یه سیاست لیست سفید بکار ببریم، نه اینکه فقط یکسری کاراکترها رو ممنوع کنیم (سیاست لیست سیاه).
  پاسخ
تشکر شده توسط :
#9
منظور از لیست سفید جی هست؟ منظور کاراکترها هست؟
اگر اینطور هست بنده هم موافقم در کل اجازه استفاده از a-zA-z1-9 و دات و آندرلاین و دش رو میدم و لا غیر

با این دوستتون کجا صحبت می کنید؟Smile
  پاسخ
تشکر شده توسط :
#10
(۱۳۹۰ اردیبهشت ۰۳, ۱۲:۳۸ ب.ظ)admin نوشته: لپ مطلب من این بود که اگر بخواییم ورودی کاربر html باشه . مثلا توی کامنتها بخواییم html وارد کنه

بسم الله الرحمن الرحیم
سلام
خوب نمی شه از تابع strip_tags واسه این کار استفاده کرد؟
کد پی‌اچ‌پی:
$data strip_tags('<script>alert(1)</script><b>Salam</b><img src="http://forum.iranphp.org/images/logo.jpg" title="Test mikonim" />','<b><img>');
echo 
$data
فقط تگ هایی که می خواییم اجرا بشن رو به تابع می دیم؟
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان