PDA

View Full Version : گفتگو: functionهای مربوط به جلوگیری از XSS



h.rezaee
پنج شنبه 13 تیر 1392, 19:46 عصر
سلام به دوستان. امیدوارم که حالتون خوب باشه.
از همه شما دوستان دعوت می کنم تا در این گفتگو بنده رو کمک و راهنمایی نمایید.
دوستان چندتا فیلترینگ هست برای جلوگیری از xss که اینجا بیان میکنم . اگر فیلترینگهای دیگری رو هم می شناسید بگید تا ازشون استفاده کنیم.

1. htmlentities()
2. stripcslashes()
3.strip_tags()
4.mysql_real_escape_string()


Documentionهایشان را می توانید از سایت php.net مطالعه کنید.

البته HTML5 یک سری امکانات هم برای فیلترینگ داره. ولی چون در ایران هنوز هم از مرورگرهای IE و اون هم نسخه قدیمی آن (IE7) استفاده میشود فعلا نمی توان روی آن تکیه کرد.

علاوه بر این functionها ، می توان از regular ها هم استفاده کرد که در همین تاپیک php می توان یافت. از دوستان اگر کسی نکته ای راجع به regular می داند خواهش می کنم در اینجا بیان کند تا همه دوستان از آن استفاده کنند. بنده خودم خیلی در زمینه regular ها اطلاعات ندارم.
برای استفاده از این فیلترینگ ها هم یک کلاس با نام sanitize درست کنیم تا این فیلترینگ ها رو بر روی آنها انجام دهیم. البته برای هر تکس باکس فیلترینگ مخصوص به خودش رو قرار بدهیم . مثلا برای فیلدی که قرار است شماره تلفن را دریافت کند باید فقط عدد وارد شود و یا در نهایت" - " و "+" یا "()" وارد شود و در صورتی که رشته یا عبارت وارد شد خطا بگیرد.
باز هم از دوستان می خواهم که اگر راه دیگری - function دیگری برای جلوگیری از xss بلد هستند بیان کنند.
ممنون

arta.nasiri
پنج شنبه 13 تیر 1392, 20:10 عصر
سلام

امنیت 100% نیست ولی میشه نزدیک به صفر کرد.
این توابعی که معرفی کردید تا حدودی جلوی این نوع حملات رو میگیره و نباید همیشه این توابع رو کافی بدونیم. مثلا همیشه رشته هاتون رو بررسی کنید که مقادیری مثل مقادیر زیر نداشته باشن

document.cookie
document.write
.parentNode
.innerHTML
vbscript
javascript

کلا باید همه راههایی که احتمال میدیم هکر بتونه با استفاده از اونا خرابکاری کنه را ببندیم.
این نمونه ها رو از سایت https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet آوردم؛ نکات خوب و مفیدی تو سایتش بیان کرده که اگه همه اونا رو رعایت کنیم تقریبا به صفر نزدیک شده ایم.

navid3d_69
پنج شنبه 13 تیر 1392, 20:14 عصر
اینکه تابعی رو خودتون درست کنید که یک سری کد هارو پاک کنه که اشتباه هست چون ممکن فراموش بشه کدهایی رو

از توابعی که خود html گذاشته می تونین استفاده کنید یا مثلا برای نظرات سایت من بیشتر از htmlpurifier استفاده می کنم که مشخص می کنید کدام تگ ها با چه خصوصیت هایی اجازه استفاده هست یا نیست واقعا این کلاس برای xss خوب هست

colors
پنج شنبه 13 تیر 1392, 20:40 عصر
سلام

لطفا راه و روشهای پیچیده و الکی رو دنبال نکنید.
جناب eshpilen با تمرکز تمام این موضوعو براتون توضیح داده. لطفا اینجارو مطالعه کنید (http://barnamenevis.org/showthread.php?281805-%D8%A7%D9%86%D9%88%D8%A7%D8%B9-%D8%AD%D9%85%D9%84%D9%87-%D9%87%D8%A7%DB%8C-%D9%86%D9%81%D9%88%D8%B0-%D9%88-%D8%B3%D9%88%D8%A1%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D 8%AF%D9%87-%D8%A7%D8%B2-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D9%88%D8%A8&p=1244510&viewfull=1#post1244510)

h.rezaee
پنج شنبه 13 تیر 1392, 20:42 عصر
اینکه تابعی رو خودتون درست کنید که یک سری کد هارو پاک کنه که اشتباه هست چون ممکن فراموش بشه کدهایی رو

از توابعی که خود html گذاشته می تونین استفاده کنید یا مثلا برای نظرات سایت من بیشتر از htmlpurifier استفاده می کنم که مشخص می کنید کدام تگ ها با چه خصوصیت هایی اجازه استفاده هست یا نیست واقعا این کلاس برای xss خوب هست
ممنون. ببینید یک کلاس که دارای توابع متعدد فیلترینگ باشد. انشالله بعد از گرفتن ایده های مختلف و نکات قابل قبول و منطقی تمامی آنها را در قالب یک کلاس و همچنین نحوه استفاده از آن را قرار می دهیم تا دوستان بتواند از آن استفاده کنند.

h.rezaee
پنج شنبه 13 تیر 1392, 20:44 عصر
سلام

امنیت 100% نیست ولی میشه نزدیک به صفر کرد.
این توابعی که معرفی کردید تا حدودی جلوی این نوع حملات رو میگیره و نباید همیشه این توابع رو کافی بدونیم. مثلا همیشه رشته هاتون رو بررسی کنید که مقادیری مثل مقادیر زیر نداشته باشن

document.cookie
document.write
.parentNode
.innerHTML
vbscript
javascript

کلا باید همه راههایی که احتمال میدیم هکر بتونه با استفاده از اونا خرابکاری کنه را ببندیم.
این نمونه ها رو از سایت https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet آوردم؛ نکات خوب و مفیدی تو سایتش بیان کرده که اگه همه اونا رو رعایت کنیم تقریبا به صفر نزدیک شده ایم.
ممنون . این سایت رو مطالعه کرده ام. در اسرع وقت نکات قابل تاملش رو قرار می دهم.
از تمامی دوستان هم می خواهم در این گفتگو شرکت کنند. بعد از xss در تاپیک دیگری راجع به نکات امنیتی دیگری بحث خواهد شد.

colors
پنج شنبه 13 تیر 1392, 20:46 عصر
سلام
مثلا همیشه رشته هاتون رو بررسی کنید که مقادیری مثل مقادیر زیر نداشته باشن

document.cookie
document.write
.parentNode
.innerHTML
vbscript
javascript



برادر من این چه کاریه! شاید کاربر دلش بخواد یا حتی لازم باشه که مثلا javascript رو برای ما بفرسته که در این صورت به مشکل برمیخوریم!
مثلا همین فروم هزارن نفر در پستها و عنوان و ... از کلمات javascript, innerHTML, vbscript , ... استفاده کرده باشن که در این صورت فاجعه میشه!

h.rezaee
پنج شنبه 13 تیر 1392, 22:23 عصر
سلام

لطفا راه و روشهای پیچیده و الکی رو دنبال نکنید.
جناب eshpilen با تمرکز تمام این موضوعو براتون توضیح داده. لطفا اینجارو مطالعه کنید (http://barnamenevis.org/showthread.php?281805-%D8%A7%D9%86%D9%88%D8%A7%D8%B9-%D8%AD%D9%85%D9%84%D9%87-%D9%87%D8%A7%DB%8C-%D9%86%D9%81%D9%88%D8%B0-%D9%88-%D8%B3%D9%88%D8%A1%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D 8%AF%D9%87-%D8%A7%D8%B2-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D9%88%D8%A8&p=1244510&viewfull=1#post1244510)
دوست عزیز ممنون. به نظر شما این کار و راه و روش پیچیده و الکی باشه چون شما همیشه خودتون رو مقید کردین به استفاده از اطلاعات دیگران و سورس های آماده. هر شخصی یک سری تجربه شخصی داره ( در هر زمینه ای ) که ما می خواهیم در اینجا درباره XSS جمع آوری کنیم و در نهایت یک کلاس بنویسیم برای استفاده.
شما هم که به نظرتون این پست و تاپیک مسخره و مزخرف هستش لطف کن دیگه وارد نشو.
لحن توهین آمیز در اینجا نداریم. اگر هم بخواد ادامه پیدا کنه .............

navid3d_69
پنج شنبه 13 تیر 1392, 23:01 عصر
ممنون. ببینید یک کلاس که دارای توابع متعدد فیلترینگ باشد. انشالله بعد از گرفتن ایده های مختلف و نکات قابل قبول و منطقی تمامی آنها را در قالب یک کلاس و همچنین نحوه استفاده از آن را قرار می دهیم تا دوستان بتواند از آن استفاده کنند.

این کلاس نیاز با آموزش نیست چندین بار توی همین فروم در باره این کلاس صحبت شده و دوستان و خودم پاسخ دادم با جستجو به راحت مطالبش رو پیدا می کنید کلا با 7-8 خط می تونین کاملان فیلتر رو از 100% تا 1% اعمال کنید برای بعضی از قسمت ها بدرد می خوره مثلا برای نظرات اگر کاربر کد html بزنه و شما فقط متن بخواهین با تابع های php اون html رو تبدیل می کنه که اجرا نشه یا جاوا اسکریپت رو ولی این فیلتر میکنه و تگ های اضافه رو حذف می کنه و فقط متن رو میزاره

arta.nasiri
پنج شنبه 13 تیر 1392, 23:37 عصر
اینکه تابعی رو خودتون درست کنید که یک سری کد هارو پاک کنه که اشتباه هست چون ممکن فراموش بشه کدهایی رو

از توابعی که خود html گذاشته می تونین استفاده کنید یا مثلا برای نظرات سایت من بیشتر از htmlpurifier استفاده می کنم که مشخص می کنید کدام تگ ها با چه خصوصیت هایی اجازه استفاده هست یا نیست واقعا این کلاس برای xss خوب هست

منم نگفتم خودمون یک تابع بنویسیم واسه اینکار!!!! و کلیه اعتبارسنجی ها رو با اون تابع انجام بدیم. بلکه باید از همه توابع موجود استفاده کنیم تا به یک نتیجه مطلوب برسیم.

colors
پنج شنبه 13 تیر 1392, 23:38 عصر
دوست عزیز ممنون. به نظر شما این کار و راه و روش پیچیده و الکی باشه چون شما همیشه خودتون رو مقید کردین به استفاده از اطلاعات دیگران و سورس های آماده. هر شخصی یک سری تجربه شخصی داره ( در هر زمینه ای ) که ما می خواهیم در اینجا درباره XSS جمع آوری کنیم و در نهایت یک کلاس بنویسیم برای استفاده.
شما هم که به نظرتون این پست و تاپیک مسخره و مزخرف هستش لطف کن دیگه وارد نشو.
لحن توهین آمیز در اینجا نداریم. اگر هم بخواد ادامه پیدا کنه .............

دوست عزیز کسی شمارو مجبور به استفاده از اطلاعات دیگران نکرده! وقتی چرخ اختراع شده چه نیازی به اختراع دوباره هست! یعنی مث اینه که شما بگین چون زبان PHP رو رسموس اختراع کرده من نباید ازش استفاده کنم و خودم زبان جدید اختراع کنم!


هر شخصی یک سری تجربه شخصی داره ( در هر زمینه ای ) که ما می خواهیم در اینجا درباره XSS جمع آوری کنیم و در نهایت یک کلاس بنویسیم برای استفاده.

بنده هم به این خاطر به اون تاپیک اشاره کردم که جناب eshpilen از نظر بحثهای امنیتی تقریبا تو این فروم متخصصه و فکر کردم بهتره از تجربه ایشون استفاده بشه!


شما هم که به نظرتون این پست و تاپیک مسخره و مزخرف هستش لطف کن دیگه وارد نشو.
لحن توهین آمیز در اینجا نداریم. اگر هم بخواد ادامه پیدا کنه .............

کسی نگفته که این تاپیک مسخره یا مزخرفه! بنده گفتم "راه و روش های الکی و پیچیده رو دنبال نکنید"! فکر نکنم کسی حرفی از مسخره یا مزخرف زده باشه!!!

در هر صورت عذرخواهی میکنم!

arta.nasiri
پنج شنبه 13 تیر 1392, 23:59 عصر
برادر من این چه کاریه! شاید کاربر دلش بخواد یا حتی لازم باشه که مثلا javascript رو برای ما بفرسته که در این صورت به مشکل برمیخوریم!
مثلا همین فروم هزارن نفر در پستها و عنوان و ... از کلمات javascript, innerHTML, vbscript , ... استفاده کرده باشن که در این صورت فاجعه میشه!

javascript داریم تا javascript!!!! آره جایی که لازم داریم کاربر کد javascript واسمون ارسال کنه باید محدودیتها رو کم کنیم.

در مورد پستها و عنوان و .. که تو همین انجمن هستن و کلمات javascript, vbScript و... توشون بکار رفته مستقیما تو دیتابیس ذخیره نمیشن و بررسی های لازم انجام و جایی که کلمات مخرب یا کلماتی که باعث کاهش امنیت میشن استفاده شده باشه کد یا خنثی میشه!!! در ضمن کلمه javascript به تنهایی مخرب نیست، ما باید الگوهایی طراحی کنیم تا کدهای مخرب رو تشخیص داده و خنثی کنند.

حالا احتمالا این سوال پیش بیاد که این همه کاربر تو انجمن javascript کد پست میکنن و مشکلی پیش نمیاد آیا ایناهم بررسی میشه یا نه ؟ صددرصد با الگوهای از پیش تعریف شده و توابع خود php تمامی این ورودی ها بررسی میشن و جایی که لازم باشه کدهای مخرب escape و مقدار hex معادلشون جایگزین میشه.

در مورد escape کردن یا نحوه بدست آوردن معادل hex مقادیر وارد شده به این لینک سر بزنید
https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

اینم یک برای محاسبه مقادیر hex, decimal و base64
http://ha.ckers.org/xsscalc.html

h.rezaee
جمعه 14 تیر 1392, 00:04 صبح
دوست عزیز کسی شمارو مجبور به استفاده از اطلاعات دیگران نکرده! وقتی چرخ اختراع شده چه نیازی به اختراع دوباره هست! یعنی مث اینه که شما بگین چون زبان PHP رو رسموس اختراع کرده من نباید ازش استفاده کنم و خودم زبان جدید اختراع کنم!

بنده هم به این خاطر به اون تاپیک اشاره کردم که جناب eshpilen از نظر بحثهای امنیتی تقریبا تو این فروم متخصصه و فکر کردم بهتره از تجربه ایشون استفاده بشه!

کسی نگفته که این تاپیک مسخره یا مزخرفه! بنده گفتم "راه و روش های الکی و پیچیده رو دنبال نکنید"! فکر نکنم کسی حرفی از مسخره یا مزخرف زده باشه!!!

در هر صورت عذرخواهی میکنم!
این چه ربطی داره. خوب اگر یک کلاسی برای جلوگیری از xss دارید بزارید تا همه دانلود کنند و به قول شما هم راه و روش های الکی و پیچیده رو دنبال نکنیم. اگر هم نیاز شد بخش هایی رو بهش اضافه کنیم.
این آقا در این زمینه تخصص داره شکی نیست ولی می خواهم در این تاپیک دیگران رو هم به این مباحث طرقیب کنم.
اگر هم شما نکته قابل توجهی دارید که بیان کنید بهتر است با لحن بهتری بگید تا .........
نحوه بیان خیلی تاثیر میزاره در ..........

mtnam1372
جمعه 14 تیر 1392, 00:21 صبح
مثل اینکه ما دیر به بحث رسیدیم ولی برای اونا که بعدا اینو میخونن
عزیزم بعضی از توابع که گفتی اصلا به حملهxss ربطی نداره
مثل
.mysql_real_escape_string()

و در مورد دوست عزیزمون که گفت باید تابعی بنویسیم که فلان چیز رو حذف کنه
قربونت برم اگر هکر کد رو باینری کرد چی؟چطور میخای حذف کنی؟

اگر کسی خاست بگه مثال بزنیم

h.rezaee
جمعه 14 تیر 1392, 00:29 صبح
مثل اینکه ما دیر به بحث رسیدیم ولی برای اونا که بعدا اینو میخونن
عزیزم بعضی از توابع که گفتی اصلا به حملهxss ربطی نداره
مثل
.mysql_real_escape_string()

و در مورد دوست عزیزمون که گفت باید تابعی بنویسیم که فلان چیز رو حذف کنه
قربونت برم اگر هکر کد رو باینری کرد چی؟چطور میخای حذف کنی؟

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

arta.nasiri
جمعه 14 تیر 1392, 00:32 صبح
مثل اینکه ما دیر به بحث رسیدیم ولی برای اونا که بعدا اینو میخونن
عزیزم بعضی از توابع که گفتی اصلا به حملهxss ربطی نداره
مثل
.mysql_real_escape_string()

و در مورد دوست عزیزمون که گفت باید تابعی بنویسیم که فلان چیز رو حذف کنه
قربونت برم اگر هکر کد رو باینری کرد چی؟چطور میخای حذف کنی؟

اگر کسی خاست بگه مثال بزنیم

سلام
دوست عزیز این تاپیک ایجاد شده تا دانسته های خودمون رو با همدیگه به اشتراک بزاریم تا در نهایت بتونیم به جوابی که میخواییم برسیم. شما هم اگه مثالی دارید لطف کنید بذارید تا آشنا بشیم

mtnam1372
جمعه 14 تیر 1392, 00:37 صبح
روش های استاندارد و ابداعی زیادی رو تاالان دیدم و تست کردم

الان نظر شخصیم روی این دوتاست



htmlspecialchars();


این یکی دقیق تر از بالایی هست اما گاهی یه ایراداتی داره که مجبوری از اون بالایی استفاده کنی




htmlentities();


هر چیزی که از کاربر میگیری و قراره چاپ بشه قبل از چاپ شدن از یکی از اینا عبور بده

نکته : دیتایی که کاربر توی دیتابیس ذخیره میکنه و بعد قراره از اونجا خونده بشه و چاپ بشه هم شامل این قضیست که خیلی وقتا فراموش
میشه وقتی از بانکت خوندی قبل از چاپ فیلترش کن

حتی مقادیر کوکیت رو(مقادیر کوکی توسط کاربر قابل تغییره)

انشاالله یه مقاله کامل در مورد انواع باگ ها روش های نفوز و در نهایت روش پچ کردنشون توی ماه رمضون انتشار میدم

یا حق

arta.nasiri
جمعه 14 تیر 1392, 00:53 صبح
روش های استاندارد و ابداعی زیادی رو تاالان دیدم و تست کردم

الان نظر شخصیم روی این دوتاست



htmlspecialchars();


این یکی دقیق تر از بالایی هست اما گاهی یه ایراداتی داره که مجبوری از اون بالایی استفاده کنی




htmlentities();


هر چیزی که از کاربر میگیری و قراره چاپ بشه قبل از چاپ شدن از یکی از اینا عبور بده

نکته : دیتایی که کاربر توی دیتابیس ذخیره میکنه و بعد قراره از اونجا خونده بشه و چاپ بشه هم شامل این قضیست که خیلی وقتا فراموش
میشه وقتی از بانکت خوندی قبل از چاپ فیلترش کن

حتی مقادیر کوکیت رو(مقادیر کوکی توسط کاربر قابل تغییره)

انشاالله یه مقاله کامل در مورد انواع باگ ها روش های نفوز و در نهایت روش پچ کردنشون توی ماه رمضون انتشار میدم

یا حق

در واقع اکتفا کردن به این 2 تا تابع کافی نیست و این 2 تا تابع در مقابل همه حملات نمیتونن خروجی امنی تولید کنند، پس باید کنار این توابع از راههای دیگه هم بهره برد.

حملات XSS فقط زمانی خطرناک میشن که میخواهیم چاپ کنیم، پس بهتره همیشه داده هایی که کاربر وارد میکنه بدون فیلتر تو دیتابیس ذخیره بشه و زمانی که قصد چاپ داریم فیلتر کنیم، البته منظورم فیلتر در رابطه با XSS هست، واسه جلوگیری از حملات sql injection باید بررسی های لازم انجام بشه.

h.rezaee
جمعه 14 تیر 1392, 00:56 صبح
دوستان عزیز سایت https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet در رابطه با نحوه دور زدن فیلترینگ ها و همچنین انواع حمله از طریق XSS رو بیان کرده . راه های جلوگیری رو بهش اشاره نکرده است.

h.rezaee
جمعه 14 تیر 1392, 01:00 صبح
در واقع اکتفا کردن به این 2 تا تابع کافی نیست و این 2 تا تابع در مقابل همه حملات نمیتونن خروجی امنی تولید کنند، پس باید کنار این توابع از راههای دیگه هم بهره برد.

حملات XSS فقط زمانی خطرناک میشن که میخواهیم چاپ کنیم، پس بهتره همیشه داده هایی که کاربر وارد میکنه بدون فیلتر تو دیتابیس ذخیره بشه و زمانی که قصد چاپ داریم فیلتر کنیم، البته منظورم فیلتر در رابطه با XSS هست، واسه جلوگیری از حملات sql injection باید بررسی های لازم انجام بشه.
دوست عزیز به نظر بنده این کار یک خورده مشکل داره که اول مستقیما ذخیره کنیم و بعد هنگام چاپ فیلترینگ رو انجام بدهیم.
چون در صورتی که در سایت شما از jquery استفاده شده باشه، هکر به سادگی میاد و یک کد رو وارد میکنه که مثلا کلیه سشن های مربوط به ایمیل کاربران رو برای اون بفرسته. این گونه کدها در لحظه لود شدن معمولا اجرا میشن.
باز هم ممنون.

arta.nasiri
جمعه 14 تیر 1392, 01:02 صبح
دوستان عزیز سایت https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet در رابطه با نحوه دور زدن فیلترینگ ها و همچنین انواع حمله از طریق XSS رو بیان کرده . راه های جلوگیری رو بهش اشاره نکرده است.

خب نباید هم اشاره بکنه، شما خودتون باید با مطالعه انواع حملات راههایی رو برای جلوگیری ازشون پیاده کنید.

البته تو این لینک https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet در مورد escape کردن مواردی رو گفته

colors
جمعه 14 تیر 1392, 01:07 صبح
javascript داریم تا javascript!!!! آره جایی که لازم داریم کاربر کد javascript واسمون ارسال کنه باید محدودیتها رو کم کنیم.
خب مگه بیکار یا بیمار باشی که بخوای بشینی این همه محدودیت رو اعمال و ... کنی!


در مورد پستها و عنوان و .. که تو همین انجمن هستن و کلمات javascript, vbScript و... توشون بکار رفته مستقیما تو دیتابیس ذخیره نمیشن و بررسی های لازم انجام و جایی که کلمات مخرب یا کلماتی که باعث کاهش امنیت میشن استفاده شده باشه کد یا خنثی میشه!!! در ضمن کلمه javascript به تنهایی مخرب نیست، ما باید الگوهایی طراحی کنیم تا کدهای مخرب رو تشخیص داده و خنثی کنند.
بحث, بحث XSS است. کسی نگفته باید بدون بررسی داده های کاربر رو ذخیره کرد! هیچ شکی نیست که باید قبل از ذخیره داده ها در بانک اونو فیلتر کرد, البته فیلتری که از طریق تابع mysql_real_escape_string انجام بگیره, نه توابع و روشهای که خودمون مینویسیم. زمان ذخیره mysql_real_escape_string و زمان چاپ htmlspecialchars یا htmlentities (بسته به هدف) صورت میگیره. البته توابع بالا کمی ریزه کاری داره که اگه درست انجام بشه, هیچ جایی نگرانی نیست.

arta.nasiri
جمعه 14 تیر 1392, 01:13 صبح
دوست عزیز به نظر بنده این کار یک خورده مشکل داره که اول مستقیما ذخیره کنیم و بعد هنگام چاپ فیلترینگ رو انجام بدهیم.
چون در صورتی که در سایت شما از jquery استفاده شده باشه، هکر به سادگی میاد و یک کد رو وارد میکنه که مثلا کلیه سشن های مربوط به ایمیل کاربران رو برای اون بفرسته. این گونه کدها در لحظه لود شدن معمولا اجرا میشن.
باز هم ممنون.

خب اگه دیتا رو از دیتابیس بگیریم که بازم میشه همون روشی که گفتم!!! ولی اگه قرار نیست دیتا جایی ذخیره بشه و از صفحه ای به صفحه دیگه میره یا تو همون صفحه بارگذاری میشه بدون اینکه تو دیتابیس ذخیره بشه، باید مقدار بررسی بشه.

colors
جمعه 14 تیر 1392, 01:16 صبح
این چه ربطی داره. خوب اگر یک کلاسی برای جلوگیری از xss دارید بزارید تا همه دانلود کنند و به قول شما هم راه و روش های الکی و پیچیده رو دنبال نکنیم. اگر هم نیاز شد بخش هایی رو بهش اضافه کنیم.
این آقا در این زمینه تخصص داره شکی نیست ولی می خواهم در این تاپیک دیگران رو هم به این مباحث طرقیب کنم.
اگر هم شما نکته قابل توجهی دارید که بیان کنید بهتر است با لحن بهتری بگید تا .........
نحوه بیان خیلی تاثیر میزاره در ..........

چی چه ربطی داره؟ برادر من خب منم همون پستی رو که معرفی کردم, یه چندخط کد ساده گذاشته که کار انجام میده و دیگه نیازی به کلاس و ... نیست. ضمنا این حمله رو به صورت کامل توضیح و بررسی کرده.
وقتی خود PHP این مشکل رو با دو سه تا تابع حل میکنه چرا میخوای بحثو کش بدی و دنبال ساخت کلاس باشی؟ مطمئن باش هر کلاس یا تابعی که بسازی نحایتا همین چندتا تابع خود PHP میشه!

در حسن نیت شما هیچ شکی نیست که بخواید بقیه رو ترغیب کنید, ولی بهتره بحثها و مسائلی رو برای ترغیب جلو بکشید که کمتر مورد بررسی قرار گرفته باشن یا واقعا نیازی بهشون باشه. الان خود شما همینجا جستجو کن XSS ببین چندتا تاپیک درموردش هست که همگی به خوبی توضیحش دادن و راه های جلوگیریشو مطرح کردن.

خلاصه بنده با هیچ لحن غیر عادی صحبت نکردم و مخلص همه دوستان هم هستیم.

colors
جمعه 14 تیر 1392, 01:21 صبح
الان نظر شخصیم روی این دوتاست


htmlspecialchars();

این یکی دقیق تر از بالایی هست اما گاهی یه ایراداتی داره که مجبوری از اون بالایی استفاده کنی


htmlentities();

هر چیزی که از کاربر میگیری و قراره چاپ بشه قبل از چاپ شدن از یکی از اینا عبور بده


دوست عزیز ربطی به دقیق یا دقیق نبودن نداره! هرکدام از این توابع کاربرد خاص خودشونو دارن و ضمنا قرار نیست هر سایتی, هرچی از کاربر یا بانک میگیره رو حتما باید فیلتر کنه! اینم بازم برمیگرده به کاربرد و هدف موضوع!

arta.nasiri
جمعه 14 تیر 1392, 01:22 صبح
خب مگه بیکار یا بیمار باشی که بخوای بشینی این همه محدودیت رو اعمال و ... کنی!


بحث, بحث XSS است. کسی نگفته باید بدون بررسی داده های کاربر رو ذخیره کرد! هیچ شکی نیست که باید قبل از ذخیره داده ها در بانک اونو فیلتر کرد, البته فیلتری که از طریق تابع mysql_real_escape_string انجام بگیره, نه توابع و روشهای که خودمون مینویسیم. زمان ذخیره mysql_real_escape_string و زمان چاپ htmlspecialchars یا htmlentities (بسته به هدف) صورت میگیره. البته توابع بالا کمی ریزه کاری داره که اگه درست انجام بشه, هیچ جایی نگرانی نیست.

خب اگه با همین 2 تا تابع امنیت تامین میشد که دیگه فریم ورکهای بزرگی مثل Zend, CakePhp, CodeIgniter و.... نمیومدن این همه خودشون رو به زحمت بندازن و کار خودشون رو با نوشتن انواع مختلف الگوها سخت و پیچیده کنن. به عنوان مثال شما کلاس security فریم ورک CodeIgniter رو مطالعه کنید اونوقت میفهمید این همه کار واسه چیه!!!

colors
جمعه 14 تیر 1392, 01:24 صبح
در واقع اکتفا کردن به این 2 تا تابع کافی نیست و این 2 تا تابع در مقابل همه حملات نمیتونن خروجی امنی تولید کنند، پس باید کنار این توابع از راههای دیگه هم بهره برد.

یعنی شما میگید میشه با عبور داده ها از دوتا تابع بالا حلمه XSS انجام داد؟ شما چه راهی رو پیشنهاد میکنید؟

colors
جمعه 14 تیر 1392, 01:29 صبح
دوست عزیز به نظر بنده این کار یک خورده مشکل داره که اول مستقیما ذخیره کنیم و بعد هنگام چاپ فیلترینگ رو انجام بدهیم.
چون در صورتی که در سایت شما از jquery استفاده شده باشه، هکر به سادگی میاد و یک کد رو وارد میکنه که مثلا کلیه سشن های مربوط به ایمیل کاربران رو برای اون بفرسته. این گونه کدها در لحظه لود شدن معمولا اجرا میشن.
باز هم ممنون.

والا من که نفهمیدم منظورتون چیه!
صفحات PHP قبل از ارسال به مرورگر کاربر توسط وب سرور اجرا و فقط نتیجه نهایی ارسال میشه, در این صورت نباید نگران زمان لود و ... باشیم.
ضمنا حرف دوستمون در رابطه با اعمال نکردن فیلتر در هنگام ذخیره ( فیلتر های XSS ) درسته و بهتره زمان چاپ اطلاعات رو فیلتر کنیم. ( کاربردهای داره )

colors
جمعه 14 تیر 1392, 01:32 صبح
خب اگه با همین 2 تا تابع امنیت تامین میشد که دیگه فریم ورکهای بزرگی مثل Zend, CakePhp, CodeIgniter و.... نمیومدن این همه خودشون رو به زحمت بندازن و کار خودشون رو با نوشتن انواع مختلف الگوها سخت و پیچیده کنن. به عنوان مثال شما کلاس security فریم ورک CodeIgniter رو مطالعه کنید اونوقت میفهمید این همه کار واسه چیه!!!

نیازی نیست که من بخوام کد فریم ورکهای X و Y رو بررسی کنم, اگه شما تونستید حمله ای در باب XSS انجام بدین که نشه با سه تابع htmlentities, htmlspecialchars, strip_tags خنثاش کرد, من به شما جایزه میدم.

arta.nasiri
جمعه 14 تیر 1392, 01:34 صبح
یعنی شما میگید میشه با عبور داده ها از دوتا تابع بالا حلمه XSS انجام داد؟ شما چه راهی رو پیشنهاد میکنید؟

نه این حرفو من نمیگم، اینو از مطالعه کدهای فریم ورکها فهمیدم که اونا هم به این 2 تا تابع اکتفا نمیکنن و با پیاده سازی توابع دیگه امنیت رو میبرن بالا!!

من راههای که به ذهنم میرسید یا راههایی که بلد بودم رو تو پست های قبلی گفتم و مطالبی رو که گفتم رو از خودم در نیاوردم یا خودم کشف نکردم!! بلکه با مطالعه فریم ورک ها به این نتایج رسیدم. بالاخره دنیای open source و کدها همه در اختیارمون هستن که با مطالعه اونا و ترکیب انواع روشها میتونیم روز به روز شاهد پیشرفت باشیم.

h.rezaee
جمعه 14 تیر 1392, 01:39 صبح
دوستان عزیز بنده هم اول تاپیک هم گفتم، بنده تا جایی که می دونستم این 4 تا تابع و همچنین regular ها و html5 میشه این فیلترها را انجام داد ، می خواهم بررسی کنم ببینم آیا تابع دیگری هست.
در مورد این که چنتا دونه تابع در حد چند خط کد هست شکی نیست، ولی این کلاس رو برای حالت MVC می خواهم . یعنی نیایم هر کجا که خواستیم مقداری رو از کاربر بگیریم و در DB ذخیره کنیم این کدها رو بنویسیم. اینجوری معنا و مفهوم شی گرایی و سه لایه بودن و .... از بین میره.
تا جایی هم که بنده تست کردم فعلا همین 4تا جواب میده ، برای xss های حرفه ای می خواهم بدونم آیا همین کافیه یا نه؟

arta.nasiri
جمعه 14 تیر 1392, 01:40 صبح
نیازی نیست که من بخوام کد فریم ورکهای X و Y رو بررسی کنم, اگه شما تونستید حمله ای در باب XSS انجام بدین که نشه با سه تابع htmlentities, htmlspecialchars, strip_tags خنثاش کرد, من به شما جایزه میدم.

این میل خودتونه که بخواهید مطالعه کنید یا نه!! حتما اطلاعاتتون زیاده که میلی به مطالعه ندارید.

در ضمن من هکر نیستم که بخوام کدی بزنم که بتونم این توابعی که فرمودید رو خنثی کنم!!! ولی تا جایی که میتونم با تکیه بر اطلاعاتم کار رو سختتر میکنم واسه هکر!!!

در ضمن بزرگی فرموده دست بالای دست زیاده.

colors
جمعه 14 تیر 1392, 01:41 صبح
نه این حرفو من نمیگم، اینو از مطالعه کدهای فریم ورکها فهمیدم که اونا هم به این 2 تا تابع اکتفا نمیکنن و با پیاده سازی توابع دیگه امنیت رو میبرن بالا!!

من راههای که به ذهنم میرسید یا راههایی که بلد بودم رو تو پست های قبلی گفتم و مطالبی رو که گفتم رو از خودم در نیاوردم یا خودم کشف نکردم!! بلکه با مطالعه فریم ورک ها به این نتایج رسیدم. بالاخره دنیای open source و کدها همه در اختیارمون هستن که با مطالعه اونا و ترکیب انواع روشها میتونیم روز به روز شاهد پیشرفت باشیم.

حرفتون کاملا متین.
ولی حتما فریم ورکها به دلایلی که مربوط به خود اسکریپتشون میشه, روشهای مختلفی رو اعمال کرده باشن که دلیلی برای استفاده شماهم از این روشها نیست.
من که تاحالا نتونستم از اون سه تا تابع داده ای رو عبور و بازهم موفق به حمله XSS بشم و تو تمامی پروژه هام از این توابع در کاربردهای مختلف استفاده کردم و تاحالا هیچ مشکلی نبوده.

colors
جمعه 14 تیر 1392, 01:47 صبح
این میل خودتونه که بخواهید مطالعه کنید یا نه!! حتما اطلاعاتتون زیاده که میلی به مطالعه ندارید.
در ضمن من هکر نیستم که بخوام کدی بزنم که بتونم این توابعی که فرمودید رو خنثی کنم!!! ولی تا جایی که میتونم با تکیه بر اطلاعاتم کار رو سختتر میکنم واسه هکر!!!
در ضمن بزرگی فرموده دست بالای دست زیاده.

کاشکی الان جناب eshpilen اینجا بودن و از اون حرفهای معروفشون میزدن. مثلا خیلی جاها فرمودن چرا لقمه رو دور سرت میچرخونی؟
وقتی با همون توابع کار به خوبی و با تضمین 99% انجام میشه مگه بیکار, بیمار, بی عقل و غیره باشی که بخوای از خودت روشهای درپیت اختراع کنی!

به بزرگی همون فردی که فرمودین فرموده, قسم میخورم که بنده هیچ ادعای ندارم و فقط اطلاعات خودمو در اختارتون میزارم و اگه جای احساس کنم حرف غیر منطقی یا ناراحت کننده ای زده ام به صورت روشن و شفاف عذرخواهی میکنم و از طرف به خاطر در اختیار گذاشتن اطلاعاتش تشکر و قدردانی میکنم.

h.rezaee
جمعه 14 تیر 1392, 01:49 صبح
والا من که نفهمیدم منظورتون چیه!
صفحات PHP قبل از ارسال به مرورگر کاربر توسط وب سرور اجرا و فقط نتیجه نهایی ارسال میشه, در این صورت نباید نگران زمان لود و ... باشیم.
ضمنا حرف دوستمون در رابطه با اعمال نکردن فیلتر در هنگام ذخیره ( فیلتر های XSS ) درسته و بهتره زمان چاپ اطلاعات رو فیلتر کنیم. ( کاربردهای داره )
بنده اصلا در مورد زمان لود هیچ چیزی نگفتم. بنده درباره نوع لود شدن گفتم. وقتی از JQUERY aAJAX استفاده میکنی در آن واحد اجرا میشه. تا جایی که بنده میدونم از طریق HEADER این دستورات ارسال و اعمال میشه. پس اول باید درخواست ما توسط HEADER ارسال و سپس نتیجه از بانک درخواست بشه و به کاربر نمایش داده بشه.
با این حرفتون یعنی ما هر چی کد می نویسیم برای انجام یک سری کارها همش بی فایده است. یعنی وقتی شما می خواهید بررسی کنید که آیا شماره تلفن وارد شده توسط کاربر و یا ایمیل درست است ، اول در وب سرور اجرا میشه. بنده میگم که نه !!!!!!!!!!!!!!!!!!! چون اول توسط دستورات و شرط های قرار داده شده بررسی و سپس به وب سرور ارسال میشه.

colors
جمعه 14 تیر 1392, 01:50 صبح
در مورد این که چنتا دونه تابع در حد چند خط کد هست شکی نیست، ولی این کلاس رو برای حالت MVC می خواهم . یعنی نیایم هر کجا که خواستیم مقداری رو از کاربر بگیریم و در DB ذخیره کنیم این کدها رو بنویسیم. اینجوری معنا و مفهوم شی گرایی و سه لایه بودن و .... از بین میره.
تا جایی هم که بنده تست کردم فعلا همین 4تا جواب میده ، برای xss های حرفه ای می خواهم بدونم آیا همین کافیه یا نه؟

دوست من, منم منظورم این نبود که نخوای وارد کلاسشون کنی, منظورم از بزرگی کار بود که در سطح یه کلاس جدا نیست.
شک نکن که تا حالا تمام دنیا برای جلوگیری از انواع حملات XSS در PHP از همین چندتابع استفاده کردن و بیشترشون که به درستی مورداستفاده قراردادن, موفق بودن.

colors
جمعه 14 تیر 1392, 01:56 صبح
بنده اصلا در مورد زمان لود هیچ چیزی نگفتم. بنده درباره نوع لود شدن گفتم. وقتی از JQUERY aAJAX استفاده میکنی در آن واحد اجرا میشه. تا جایی که بنده میدونم از طریق HEADER این دستورات ارسال و اعمال میشه. پس اول باید درخواست ما توسط HEADER ارسال و سپس نتیجه از بانک درخواست بشه و به کاربر نمایش داده بشه.
با این حرفتون یعنی ما هر چی کد می نویسیم برای انجام یک سری کارها همش بی فایده است. یعنی وقتی شما می خواهید بررسی کنید که آیا شماره تلفن وارد شده توسط کاربر و یا ایمیل درست است ، اول در وب سرور اجرا میشه. بنده میگم که نه !!!!!!!!!!!!!!!!!!! چون اول توسط دستورات و شرط های قرار داده شده بررسی و سپس به وب سرور ارسال میشه.

خب بازم همون شد که! وقتی از Ajax استفاده میکنی یعنی میخوای با سرور در ارتباط باشی, درسته! پس جای نگرانی نیست, درسته که در آن واحد اجرا میشه ولی بازم صفحه مربوط به سرور تا توسط سرور اجرا و خروجی نگیره چیزی به کاربر نشون نمیده. بهتره مثالتونو تست کنید تا بهتر متوجه بشید.

کاری به پروتکل و headerو اینا نداریم, شما قبل از پرسش از بانک باید داده کاربر رو چ و فیلتر کنید و بعد برای کوئری ازش استفاده کنید که مربوط به XSS نمیشه, ولی خروجی که از بانک میگیری رو میتونی قبل از ارسال به مرورگر کاربر(به صورت Ajax) فیلتر کنی.

arta.nasiri
جمعه 14 تیر 1392, 01:57 صبح
کاشکی الان جناب eshpilen اینجا بودن و از اون حرفهای معروفشون میزدن. مثلا خیلی جاها فرمودن چرا لقمه رو دور سرت میچرخونی؟
وقتی با همون توابع کار به خوبی و با تضمین 99% انجام میشه مگه بیکار, بیمار, بی عقل و غیره باشی که بخوای از خودت روشهای درپیت اختراع کنی!

به بزرگی همون فردی که فرمودین فرموده, قسم میخورم که بنده هیچ ادعای ندارم و فقط اطلاعات خودمو در اختارتون میزارم و اگه جای احساس کنم حرف غیر منطقی یا ناراحت کننده ای زده ام به صورت روشن و شفاف عذرخواهی میکنم و از طرف به خاطر در اختیار گذاشتن اطلاعاتش تشکر و قدردانی میکنم.

نظرتون محترم شاید ماها مریض، بیکار، بی عقل یا غیر منطقی باشیم حتی سازمان owasp بی عقل که این همه تحقیقات تو زمینه امنیت میکنه!!! حتی مطالبی که من گفتم از فریم ورک ها بدست آوردم، و این فریم ورکها تو کامنت هاشون به این سازمان اشاره کردند که به جز استفاده از توابعی که شما فرمودید از راهکارهای این سازمان هم استفاده کردند!!!

h.rezaee
جمعه 14 تیر 1392, 01:57 صبح
دوست من, منم منظورم این نبود که نخوای وارد کلاسشون کنی, منظورم از بزرگی کار بود که در سطح یه کلاس جدا نیست.
شک نکن که تا حالا تمام دنیا برای جلوگیری از انواع حملات XSS در PHP از همین چندتابع استفاده کردن و بیشترشون که به درستی مورداستفاده قراردادن, موفق بودن.
شما از کجا می دونید شاید (100%) در ادامه بخواهیم بخش های جلوگیری از روش های هک دیگر رو هم درون آن قرار ندیم؟؟؟؟؟؟؟؟؟؟؟؟
در یکی از همین پست ها گفتم ، بخش بخش درباره هر یک از روش های هک و راههای جلوگیری آن از اطلاعات دوستان و عزیزانی که در قبلا تاپیک گذاشتن استفاده می کنیم و این فایل و کلاس رو گسترش میدیم و از اون خیلی راحت استفاده می کنیم.

چرا در سطح یک کلاس نیست؟ وقتی می خواهی از OOP استفاده کنی باید برای کوچکترین کاری که انجام میدی یک Function داشته باشی و در صورت لزوم فقط به اون اشاره کنی.

colors
جمعه 14 تیر 1392, 02:01 صبح
نظرتون محترم شاید ماها مریض، بیکار، بی عقل یا غیر منطقی باشیم حتی سازمان owasp بی عقل که این همه تحقیقات تو زمینه امنیت میکنه!!! حتی مطالبی که من گفتم از فریم ورک ها بدست آوردم، و این فریم ورکها تو کامنت هاشون به این سازمان اشاره کردند که به جز استفاده از توابعی که شما فرمودید از راهکارهای این سازمان هم استفاده کردند!!!

بازم میگم که بنده منظورم هیچ شخص خاص یا ...ای نیست.
و بازم میگم که حتما اون فریم ورکها نسبت به خود اسکریپتشون شک و تردید دارن که از روشهای دیگری هم استفاده میکنن. همه چی برمیرگده به موضوع و هدف سایت. اینجا بحث شده که آقا چطوری باید حمله XSS رو خنثی کرد که بنده هم فرمودم با اون روشها و دیگه کاری ندارم که کی چی گفته و نگفته. شاید اون فریم ورکها باگهای داشته باشن که نیازه در حال استفاده از اون توابع, روشها و الگوهای خودشون روهم پیاده سازی کنن.

h.rezaee
جمعه 14 تیر 1392, 02:04 صبح
همون جوری که خیلی از دوستان و استادان برنامه نویس به بنده گفتند یک برنامه خوب اونی هستش که واسه کوچکترین عملکرد واکنش مناسب داشته باشه.
نمونه خیلی ساده در بخش .htaccess آقای رضا قربانی همون جوری که گفتند برای اررور های صفحات وب یک صفحه دیگری رو جایگزین و نمایش بدیم.
ما هم با این function نویسی فقط می خواهیم برای هر قسمت ( مثلا دریافت شماره تلفن ) بررسی هایی رو روی آن انجام بدیم و حرفه ای بودن و خوب بودن اون رو به رخ کاربر بکشیم.
پس از ماکزیمم امکانات استفاده می کنیم.
باز هم از دوستان دعوت می کنم در این موضوع شرکت کنند و بنده رو راهنمایی نمایند.

colors
جمعه 14 تیر 1392, 02:09 صبح
شما از کجا می دونید شاید (100%) در ادامه بخواهیم بخش های جلوگیری از روش های هک دیگر رو هم درون آن قرار ندیم؟؟؟؟؟؟؟؟؟؟؟؟
در یکی از همین پست ها گفتم ، بخش بخش درباره هر یک از روش های هک و راههای جلوگیری آن از اطلاعات دوستان و عزیزانی که در قبلا تاپیک گذاشتن استفاده می کنیم و این فایل و کلاس رو گسترش میدیم و از اون خیلی راحت استفاده می کنیم.

چرا در سطح یک کلاس نیست؟ وقتی می خواهی از OOP استفاده کنی باید برای کوچکترین کاری که انجام میدی یک Function داشته باشی و در صورت لزوم فقط به اون اشاره کنی.

بنده هیچ مشکلی با کلاس و توابع ندارم و خیلی هم خوب میشه که شما زحمت میکشین یه کلاس مربوط به خنثی کردن حملات میسازین که بنده و دوستان دیگه ازش لذت ببریم.
حرف بنده فقط مثالی از کوچکی کار بود ( XSS )

مثلا بنده خودم در کلاسی که برای خنثی سازی و فیلتر داده ها ساخته ام, یه تابع رو قرارداده ام که طبق نیازها و خواسته های خودم طراحی شده و به صورت زیر هستش.

class
.
.
.

public static function HtmlAnnul($value)
{
return htmlentities($value, ENT_QUOTES, "UTF-8");
}

public static function StripTags($value)
{
return strip_tags($value);
}

public static function AnnulAndStrip($value)
{
return self::HtmlAnnul(self::StripTags($value));

}

.
.
.

colors
جمعه 14 تیر 1392, 02:12 صبح
همون جوری که خیلی از دوستان و استادان برنامه نویس به بنده گفتند یک برنامه خوب اونی هستش که واسه کوچکترین عملکرد واکنش مناسب داشته باشه.
نمونه خیلی ساده در بخش .htaccess آقای رضا قربانی همون جوری که گفتند برای اررور های صفحات وب یک صفحه دیگری رو جایگزین و نمایش بدیم.
ما هم با این function نویسی فقط می خواهیم برای هر قسمت ( مثلا دریافت شماره تلفن ) بررسی هایی رو روی آن انجام بدیم و حرفه ای بودن و خوب بودن اون رو به رخ کاربر بکشیم.
پس از ماکزیمم امکانات استفاده می کنیم.
باز هم از دوستان دعوت می کنم در این موضوع شرکت کنند و بنده رو راهنمایی نمایند.

بحث ما درمورد حمله XSS و روشهای جلوگیریش هست, در غیر این صورت کاملا با شما موافقم.

arta.nasiri
جمعه 14 تیر 1392, 02:14 صبح
بازم میگم که بنده منظورم هیچ شخص خاص یا ...ای نیست.
و بازم میگم که حتما اون فریم ورکها نسبت به خود اسکریپتشون شک و تردید دارن که از روشهای دیگری هم استفاده میکنن. همه چی برمیرگده به موضوع و هدف سایت. اینجا بحث شده که آقا چطوری باید حمله XSS رو خنثی کرد که بنده هم فرمودم با اون روشها و دیگه کاری ندارم که کی چی گفته و نگفته. شاید اون فریم ورکها باگهای داشته باشن که نیازه در حال استفاده از اون توابع, روشها و الگوهای خودشون روهم پیاده سازی کنن.

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

اگه به این فریم ورک ها شک دارید چطوره اسکریپت نال شده vBulletin رو بررسی کنید.

بالاخره هرچی هم باشه الکی فریم ورک های محبوب و معروفی نشدن به خاطره همین کاراشونه که معروف و محبوب شدن.

h.rezaee
جمعه 14 تیر 1392, 02:21 صبح
بنده هیچ مشکلی با کلاس و توابع ندارم و خیلی هم خوب میشه که شما زحمت میکشین یه کلاس مربوط به خنثی کردن حملات میسازین که بنده و دوستان دیگه ازش لذت ببریم.
حرف بنده فقط مثالی از کوچکی کار بود ( XSS )

مثلا بنده خودم در کلاسی که برای خنثی سازی و فیلتر داده ها ساخته ام, یه تابع رو قرارداده ام که طبق نیازها و خواسته های خودم طراحی شده و به صورت زیر هستش.

class
.
.
.

public static function HtmlAnnul($value)
{
return htmlentities($value, ENT_QUOTES, "UTF-8");
}

public static function StripTags($value)
{
return strip_tags($value);
}

public static function AnnulAndStrip($value)
{
return self::HtmlAnnul(self::StripTags($value));

}

.
.
.
به نظر بنده تمامی این کارها رو در یک function بزارید یعنی به این صورت :


function sanitize($value)
{
$result = htmlentities($value);
$result = stripcslashes($result);
$result = strip_tags($result);
return $result;
}


و برای فیلترینگ مثلا فقط شماره هم یک function دیگه در همین کلاس قرار میدیم به اسم numval و ......

h.rezaee
جمعه 14 تیر 1392, 02:26 صبح
حرف بنده فقط مثالی از کوچکی کار بود ( XSS )
.[/PHP]
البته مسئله خیلی کوچکی هم نیست ، چون اکثر وب سایت ها ( حتی یک سری از وب سایت های معروف ) هم همین مشکل و مشکلات پیش پا افتاده ساده مثل این رو ( به نظر شما البته نظر خود بنده هم در یک نگاه همینه و همچنین یک سری از برنامه نویسان عزیز) دارند.

colors
جمعه 14 تیر 1392, 02:27 صبح
در ضمن بزرگی فرموده دست بالای دست زیاده.
اولا اینجا من یه عذرخواهی به شما بدهکار شدم که عذزخواهی میکنم. خداوکیلی ناراحت شدم اینو فرمودین. همه ما اینجا جمع شدیم تا به هم کمک کنیم و از تجربیات هم دیگه استفاده کنیم! یعنی چی که دست بالای دست زیاده؟ یعنی من ادعای بزرگی و دانش کردم؟ لطفا اصلا دیگه همچین حرفی رو تکرار نکنین, ظاهرا شما آدم منطقی هستین و این جور حرفها از شما بعیده.


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


برای چندمین بار دارم میگم که اونها فقط به خاطر مسائلی که برمیگرده به خودشون مجبور به استفاده از توابع توسعه یافته دستی خودشون هستن, وگرنه طبق حرف شما همه سایتها, داده رو میگیرن و از توابع عبور میدن تمام.

colors
جمعه 14 تیر 1392, 02:29 صبح
به نظر بنده تمامی این کارها رو در یک function بزارید یعنی به این صورت :


function sanitize($value)
{
$result = htmlentities($value);
$result = stripcslashes($result);
$result = strip_tags($result);
return $result;
}


و برای فیلترینگ مثلا فقط شماره هم یک function دیگه در همین کلاس قرار میدیم به اسم numval و ......

موافقم, ولی طبق نیازهای خودم تشخیص دادم که این روش بهتره, چون بعضی جاها بسته به هدف و کاربردی که داره فقط نیاز به یکیشون هست.

h.rezaee
جمعه 14 تیر 1392, 02:30 صبح
بحث ما درمورد حمله XSS و روشهای جلوگیریش هست, در غیر این صورت کاملا با شما موافقم.
یعنی شما میگید باید در این قسمت از oop استفاده نکنیم؟

colors
جمعه 14 تیر 1392, 02:32 صبح
یعنی شما میگید باید در این قسمت از oop استفاده نکنیم؟

نه منظورم از توابع چک داده های مث, تاریخ, شماره تلفن و ... بود

mtnam1372
جمعه 14 تیر 1392, 08:45 صبح
خوب اقایون من نبودم پاسختون رو بدم
اونایی که گفتن توابعی که من معرفی کردم ضعیف هستن در مقابل این حملات
یا حرف نزنید یا عمل کنید
یکدومتون این توابع رو دوربزنه مام متوجه بشیم

من خودم همه جوره تست کردم

خواهشا ادعای همهچی دون بودن نکنید
خواهشا بیخودی و ندونسته یه چیزیرو زیر سوال نبرین

arta.nasiri
جمعه 14 تیر 1392, 14:47 عصر
اولا اینجا من یه عذرخواهی به شما بدهکار شدم که عذزخواهی میکنم. خداوکیلی ناراحت شدم اینو فرمودین. همه ما اینجا جمع شدیم تا به هم کمک کنیم و از تجربیات هم دیگه استفاده کنیم! یعنی چی که دست بالای دست زیاده؟ یعنی من ادعای بزرگی و دانش کردم؟ لطفا اصلا دیگه همچین حرفی رو تکرار نکنین, ظاهرا شما آدم منطقی هستین و این جور حرفها از شما بعیده.


عذرخواهی واسه چی؟ اینجا همه نظرات خودشون رو به اشتراک میذارن و ممکنه نظرات با همدیگه متفاوت باشه!!

در مورد این جمله که میگه دست بالای دست زیاده! منظورم شما نبودید. منظورم کلی بود یعنی ما هر چقدرم تلاش کنیم جلوی اینگونه حملات رو بگیریم بازم کسانی پیدا میشن که از موانع ما عبور کنن! بالاخره امنیت 100% نیست که. منم اینجا فقط چیزایی که میدونستم رو گفتم تا بقیه دوستان ازشون استفاده کنند و حرفی یا روشی رو از خودم نگفتم.

منم از شما عذر میخوام اگه حرفی زدم که باعث ناراحتیتون شده.

Veteran
جمعه 14 تیر 1392, 14:57 عصر
یعنی ما هر چقدرم تلاش کنیم جلوی اینگونه حملات رو بگیریم بازم کسانی پیدا میشن که از موانع ما عبور کنن! من اینجور فکر میکنم که میشه 100% مثلا جلوی باگ XSS رو گرفت.

اما اون چیزی که باعث هک شدن سایت ما میشه یکی از دلایلش به خاطر سیستم عامل ها و سرور ها و سایت های دیگه روی سرور هست
یعنی اگه یک روزی سایت ما هک شد دلیلش این نیست که حتما برنامه ما باگ داشته ! یا مثلا ما نتونستیم به صورت کامل یک سری مشکلات رو مثل همین باگ یا SQL INJECTION بگیریم! نه ؟
نظر شما چیه ؟

navid3d_69
جمعه 14 تیر 1392, 15:23 عصر
بنظر من امنیت رو میشه به 100% هم رسوند ولی خیلی موارد هست که میشه باعث بشه هک بشین .

مثلا امنیت به تجربه و خیلی وقت ها به امکانات بستگی داره مثلا یاهو خیلی وقت بود باگ نداشت تا این امکان ایمیل جدید رو اصافه کرد و باگ XSS بوجود اومد این توی همه ی موارد هست ممکن شما یک سایت کامل رو درست کنید اونم برای بار دهم و جوابم داد که امنیت خوبی داره و توی برنامه نویسی این سایت های عادی دریگه از نظر امنیت کامل هستید ولی یک امکانی می خواهین به یکی از این سایتا اضافه کنید که مثلا با دستورات سیستم مثل تابع exec استفاده میشه خوب ممکن هست شما کد رو قرار بدین درست کار کنه بعد از مثلا 1 ماه سایت شما هک بشه حالا با لاگ گرفتن و ... متوجه میشین که از Command Injection هک شدین حالا این روش رو می بندین و این میشه تجربه برای بعدا حتی ممکن هست با بستن باز هم از این روش هک بشین و این تجربه های خیلی فرق داره با اینکه مطلبی که کسی نوشته رو بخونید اون مطلب بیشتر میشه یک سر نخ و این هم بگم سعی کنید تست بگیرین ار همه توابع برای XSS من توی همین فروم دیدم کسایی هستن تابع برای sql injection درست کردن که 100% جای نفوذ داره به راحتی و وقتی ازشون می پرسی می گن 10 نا سایت چند ساله با این فانکش ها هک نشدن خب شاید کسی هک نکرده اون سایت هارو همه این موارد باید در نظر گرفته بشه

h.rezaee
جمعه 14 تیر 1392, 15:44 عصر
من اینجور فکر میکنم که میشه 100% مثلا جلوی باگ XSS رو گرفت.

اما اون چیزی که باعث هک شدن سایت ما میشه یکی از دلایلش به خاطر سیستم عامل ها و سرور ها و سایت های دیگه روی سرور هست
یعنی اگه یک روزی سایت ما هک شد دلیلش این نیست که حتما برنامه ما باگ داشته ! یا مثلا ما نتونستیم به صورت کامل یک سری مشکلات رو مثل همین باگ یا SQL INJECTION بگیریم! نه ؟
نظر شما چیه ؟
دوست عزیز هیچ نرم افزاری امنیتش 100% نیست. این ادعا رو یک بار شرکت اوراکل انجام داد، هزاران هکر رفتند سراغ بانک اوراکل و هزاران هزار باگ و ..... پیدا کردند.
این که میگید از طریق سرور ها و سایت های دیگه هک میشه ، بله درسته ، این زمانی اتفاق می افته که از هاست اشتراکی استفاده می کنید.

navid3d_69
جمعه 14 تیر 1392, 16:02 عصر
برعکس اوراکل اپل بود که مرورگرش امسال هرکاری کردن توی مسابقه هک بشه نشد 100% هست ولی اگر همه با هم هماهنگ باشه اگر قرار باشه یک دفعه بگیم لینوکس باگ داشت یک دفعه بگیم نمی دونم مرورگر کاربر باگ داشت و .....
موفقیت اپل برای جلو گیری از هک نشدن ین بود که همه چیزش ماله خودش هست سیستم عامل ماله خودش هست و میدونه چیکار کرده ما هم باید اینجوری باشیم امنیت سایت php رو 100% کنیم ولی وقتی یک باگ مثلا توی لینوکس هست من و شما نمی تونیم حل کنیم اینکه دوستان میگن فلا تابع رو میشه هک کرد احتمالش هست ولی سایتی که مثلا من طراحی کردم و روزی 5000 تا بازدید داره و همه کاربر مبتدی هستند من ممکن هست 1% متوجه بشم که اون تابع امنیت نداره چون دلیلش کمه هک بشه ولی مثلا سایتی مثل فیس بوک و یاهو و .... نمی تونه اعتماد کنه و از این تابع استفاده کنه شایدم بکنه ولی اون اگرم استفاده نکنه کسانی رو داره که طرف مثلا سایت یاهو رو هک کردن و می دونه مشکل اون تابع چیه ولی ما که اینجوری نیستم نباید حساس بشیم بعضی ها خیلی حساس هستند بعضی ها هم کلا بی خیال

توی کلاس لینوکس دانشگاه بحث sql injection بود استاد همون جا 3 تا سایت بزرگ این رو باز کرد که مربوط به شرکت های بزرگ ایران بودن و راحت توی 10 دقیقه 3 تا شون رو با sql injection رفت توی مدیریت منظورم از این حرف اینه که وقتی هنوز سایت هایی با اون بزرگی که من دیدم راحت هک میشن دیگه سایت های کوچیک رو کسی کار نداره .

ایننم بگم بنظر من امنیت سایت اولویت اول برای برنامه نویسی وب هست

h.rezaee
جمعه 14 تیر 1392, 20:25 عصر
ایننم بگم بنظر من امنیت سایت اولویت اول برای برنامه نویسی وب هست

بله بنده هم این رو قبول دارم. منتها اینجا برعکس هستش . ظاهر خوب باشه همه چیز خوبه؟!؟؟؟!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

eshpilen
شنبه 15 تیر 1392, 09:23 صبح
امنیت مقوله گسترده و پیچیده ایست.
حتی بعضی نرم افزارها و برنامه نویسان معروف هم ممکنه درش اشتباه کرده باشن؛ یعنی مثلا خوب درک نکرده باشن بعضی موارد رو.
نمیشه 100% به یک برنامه و فریمورک خاصی مطمئن بود.
بعدم اصلا چی بوده شما چی دیدید چی برداشت کردید شاید برداشت و تصور شما اشتباه بوده. شاید یه موردی بسته به ساختار و جزییات داخلی همون برنامه و فریمورک بوده.

در کلش هم تاجاییکه میدونم دو زمینه برای خنثی کردن XSS داریم.

یک زمینه موقعی که قرار نیست رشتهء مورد نظر هیچ کد HTML/JS ای داشته باشه که بخوایم اجرا بشن.
در این موارد کار ساده است. همون تابع htmlspecialchars کفایت میکنه اگر میخوایم اون رشته رو در متن صفحه درج کنیم.
اگر رشته میخواد در بقیهء مکانها مثل بین تگهای جاوااسکریپت درج بشه ممکنه داستان تفاوت بکنه که منم جزییاتش یادم نیست ولی توی سایت OWASP خونده بودم. خوشبختانه در بیشتر برنامه ها چنین مواردی رو نداریم و میخوایم رشته رو مستقیما در متن صفحه درج کنیم.
بهرحال در همون سایت OWASP هم شما میبینید که بسته به اینکه میخواید محتویات رو در کجای صفحه درج کنید، تابعی جداگانه وجود داره. یعنی میخوام بگم اینطور نیست که یک تابع همه کاره وجود داشته باشه که بدون هیچ ضعف امنیتی و محدودیت فنی، برای همهء موارد بکار بره.
htmlspecialchars برای مواردی که متن غیرقابل اعتماد مورد نظر میخواد در بخشهای متنی عادی صفحهء HTML درج بشه کافیه. اگر مورد خاصی داشتید که متن مورد نظر میخواست در جای دیگری درج بشه، بخصوص جاهای حساس و خطرناکی مثل محدودهء تگهای جاوااسکریپت، اونوقت داستان رو باید بررسی کرد. بنده هم با اینکه قبلا مطالعش رو کردم ولی حضور ذهن و وقت ندارم که الان این موارد خاص رو مجددا بررسی کنم و شرح بدم.

یک زمینهء دیگر موقعی است که قرار است رشتهء مورد نظر بعضی کدهای HTML/JS هم داشته باشه که اجرا بشن. مثلا خروجی حاصل از ادیتورهای WYSIWYG که فرمت های HTML و حتی عکس و غیره دارن.
این موارد از موارد پیچیده و مشکل هست. بخاطر اینکه ساختار HTML+JS خیلی درهم و پیچیده و وصله پینه است و از مرورگر به مرورگر و از نسخه به نسخه هم تفاوتهایی داره و مرورگرهای مختلف و نسخه های مختلف باگهایی هم دارن. از هزار و یک طریق که من و شما نمیدونیم و فکرش رو نمیکنیم ممکنه حفره و ضعف باشه و نفوذ بشه. بنابراین در این موارد توصیهء اکید اینه که از کتابخانه های پیشرفته و مفصل آماده که مخصوص این کار هستن، مثل htmlpurifier، استفاده کنید بجای نوشتن توابع و روشهای خودتون. یعنی حتی بنده هم که روی امنیت اینقدر مطالعه داشتم در اینطور موارد این کار رو نمیکنم که از توابع و روشهایی که خودم طراحی میکنم استفاده کنم.

h.rezaee
شنبه 15 تیر 1392, 09:56 صبح
ممنون آقای eshpilen (http://barnamenevis.org/member.php?148005-eshpilen).
برای نمونه ادیتور این سایت هم احتمالا از همین کتابخانه استفاده کرده ؟!!
بقیه توابعی رو که معرفی کرده بودم چطور؟
میشه ازشون استفاده کرد؟
فیلترینگ خوبی هستش ، حداقل برای قسمت هایی که قرار نیست هیچ کد html/js برای ذخیره در DB استفاده بشه؟

h.rezaee
شنبه 15 تیر 1392, 11:39 صبح
سلام . دوستان در پی مطالعه Document مربوط به htmlpurifier به نکاتی بر خورد کردم و همچنین یک سری سوالات برای بنده بوجود آمد.
با توجه به این که زمان استفاده از htmlpurifier یک سری تگ ها از قبیل object, embed غیر فعال می شوند ، "دلیل غیر فعال شدن هم به این دلیل هست که با استفاده از فلش می توانند کوکی های مورد نیاز را بدست آورند" ، آیا از htmlpurifer برای فیلترینگ برای بخش Admin هم استفاده شود و یا خیر؟
و در صورت استفاده ، ایا امکان فعال کردن این قسمت ها برای Admin وجود دارد و در صورت وجود داشتن به صلاح هستش که این قسمت ها هم فعال بشن؟

colors
شنبه 15 تیر 1392, 13:32 عصر
آیا از htmlpurifer برای فیلترینگ برای بخش Admin هم استفاده شود و یا خیر؟
و در صورت استفاده ، ایا امکان فعال کردن این قسمت ها برای Admin وجود دارد و در صورت وجود داشتن به صلاح هستش که این قسمت ها هم فعال بشن؟

سلام

بله شک نکن که باید استفاده کنی, البته نه خود این htmlpurifer (کلا منظورم محدودیت ها و ...) حتما باید اعمال بشه. اصلا نباید به مدیرسایت اعتماد کرد, اگرهم مشکلی از نظر مدیرنباشه, شاید نفوذگرها وقتی در سایت باکی پیدانکن, مدیریت سایت رو مورد هدف قرار بدن و در صورتی که شما اصول و نکات امنیتی رو رعایت نکرده باشید, فاجعه های خیلی بیشتری(نه فقط فاجعه) رخ میده!

navid3d_69
شنبه 15 تیر 1392, 14:03 عصر
من همیشه ورودی های مدیرم فیلتر می کنم می تونی 3 تا فایل تنظیمات برای htmlpurifier درست کنی با تنظیمات مختلف و برای هر قسمت جدا باشه من همیشه اینجوری کار می کنم یکی مدیریت یکی کاربر درجه 1 و کاربر درجه 2 که اون درجه 2 یک مقدار آزاد تر هست

afshin9032
شنبه 15 تیر 1392, 15:24 عصر
خود php مجموعه کلاس PDO رابرای sql injection داره که بسیار پرکاربرد و مرسوم شده در پروژه ها و حتی خود php هم استفاده از این کلاس رو توصیه کرده است .

Veteran
شنبه 15 تیر 1392, 17:02 عصر
آیا از htmlpurifer برای فیلترینگ برای بخش Admin هم استفاده شود و یا خیر؟

له شک نکن که باید استفاده کنی,
کارش چیه ؟

h.rezaee
شنبه 15 تیر 1392, 21:38 عصر
خود php مجموعه کلاس PDO رابرای sql injection داره که بسیار پرکاربرد و مرسوم شده در پروژه ها و حتی خود php هم استفاده از این کلاس رو توصیه کرده است .
ممنون. دوست عزیز میدونم. اینجا صحبت ما درباره جلوگیری از حمله xss و حملاتی مشابه آن که مکمل هم هستند هستش.
خواستین در این رابطه هم اطلاعات کافی کسب کنید ، سایت mysql در بخش SP یا همون استور پروستیژر ها ( لاتین ننوشتم که اشتباه نباشه )می تونی مطالعه کنی.

h.rezaee
شنبه 15 تیر 1392, 21:43 عصر
کارش چیه ؟
کارش فیلترینگ خروجی ها برای نمایش به کاربر است. ببینید هکر میاد بخش هایی که سایت شما امکان درج مطلب ( مثلا بخش نظر سنجی ) داره رو با قرار دادن یک کد Ajax یا فلش یا .... اون بخش رو هک می کنه، مثلا میاد و کوکی های مورد نیازش رو برای خودش ایمیل می کنه ( کدش هم تو اینترنت فکر کنم خیلی زیاد باشه با یک سرچ کوچیک می توانید بدست بیارید. )
در صورت نیاز به سایت خودش مراجعه کنید ، Documention خیلی خوبی داره می تونی ازش استفاده کنی.