PDA

View Full Version : امن سازی سیستم پیام دهی ! Messagin



siavashsay
چهارشنبه 27 دی 1391, 11:36 صبح
دوستان من یک سیستم پیام دهی توی سایتم دارم !
حالا میخوام امن سازیش کنم !
اینو بگم که از wysiwyg برای ارسال پیام استفاده میکنم !
پس قاعدتا تگ های html رو دارم میگیرم و به دیتابیس میفرستم !
قاعدتا باید توابعی مثل addslashes - stripslashes - mysql_real_escape_string - htmlentities
استفاده کنم !
حالا میخوام بدونم دقیقا باید کجا ازین توابع استفاده کنم که در موقع ارسال و دریافت پیام کدها درست نشون داده شن ( به صورت html نه ) و سیستم هم امن باشه !
مثلا در موقع ارسال Message رو stripslashes - mysql_real_scape_string فیلتر میکنم و در موقع دریافت ( نشون دادن پیام ) از htmlentities استفاده میکنم !
اما وقتی از htmlentites استفاده میکنم تگ ها رو نشون میده ! و من نمیخوام اینطور بشه !
وقتی استفاده نمیکنم درست میشه ! اما از لحاظ امنیتی مشکلی نداره ؟!
با تشکر !

siavashsay
چهارشنبه 27 دی 1391, 12:20 عصر
هیچ جوابی نیست ؟!!!!!

2undercover
چهارشنبه 27 دی 1391, 12:30 عصر
یکمی جستجو می کردید توی خود سایت بود: استفاده از تگ های HTML در متن های کاربران (http://barnamenevis.org/showthread.php?378248-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%DA%A9%D8%AF-%D9%87%D8%A7%DB%8C-HTML-%D8%AF%D8%B1-%D9%86%D8%B8%D8%B1%D8%A7%D8%AA-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%A7%D9%86)

siavashsay
چهارشنبه 27 دی 1391, 12:35 عصر
دوست عزیز !
من خودم توی اون تاپیک پست دارم !
اون تاپیک هم در مورد فیلتر کردن تگ script هست بیشتر !
در مورد استفاده از این توابع هیچ مشکلی ندارم ! الان هم کدم بدون مشکل داره اجرا میشه !
فقط میخوام با بقیه مشورتی داشته باشم ببینم راهکار مناسبتری هم دارن یا نه ! :)
بازم ممنون !

eshpilen
چهارشنبه 27 دی 1391, 13:20 عصر
اما وقتی از htmlentites استفاده میکنم تگ ها رو نشون میده ! و من نمیخوام اینطور بشه !
وقتی استفاده نمیکنم درست میشه ! اما از لحاظ امنیتی مشکلی نداره ؟!
با تشکر !
برای اینکه یکسری فرمت HTML رو نگه داری و موارد خطرناک رو حذف کنی، از htmlpurifier استفاده کن.
البته اون mysql_real_escape_string هم که جای خودش. اون مربوط به SQL Injection میشه.

Unique
چهارشنبه 27 دی 1391, 15:34 عصر
توصیه میکنم قبل از ثبت در database از htmlpurifier یا htmlentities و غیره استفاده نکنی ، در زمان نمایش این کار را انجام بدین ، دلیلش هم اینه که همیشه data اصلی را دارین و میتونید روشتون را عوض کنید.

siavashsay
چهارشنبه 27 دی 1391, 16:32 عصر
ممونم از توضحیاتتون !
اما اگر میشه یک مثال واضح بزنید !

برای اینکه یکسری فرمت HTML رو نگه داری و موارد خطرناک رو حذف کنی، از htmlpurifier استفاده کن.
البته اون mysql_real_escape_string هم که جای خودش. اون مربوط به SQL Injection میشه.
یعنی htmlpurifier خودش escape نمیکنه ؟! اگر بخوایم ازش استفاده کنیم قبل از mysql_real_escape_string یا بعدش ؟!

توصیه میکنم قبل از ثبت در database از htmlpurifier یا htmlentities و غیره استفاده نکنی ، در زمان نمایش این کار را انجام بدین ، دلیلش هم اینه که همیشه data اصلی را دارین و میتونید روشتون را عوض کنید.
ببینید من اول میام MSG رو میگیرم ! بعد stripslashes میکنم و بعد mysql_real_escape_string ! و بعد میریزم توی دیتابیس ! همینقدر کافیه ؟!
بعد موقع خروج از دیتابیس میام htmlpurifier میکنم !
حله همه چی ؟!

eshpilen
چهارشنبه 27 دی 1391, 22:38 عصر
اما اگر میشه یک مثال واضح بزنید!
مثال تحقیق و تست میخواد که بنده وقتش رو ندارم.
سرنخ رو گفتم دیگه بقیش با خودتونه.
تازه اون زمان که در این مورد تحقیق کردم تا به جواب رسیدم که از چه روشی باید استفاده کرد کلی مایه گذاشتم.
کلا اینطور کارها دیگه باید حرفه ای باشی خودت. باید بخونی و بفهمی و دربیاری. بدونی چی به چیه. نمونه کدش رو ببینی باید بفهمی چرا چکار کرده. اطلاعات و بینش امنیتی پایش رو باید داشته باشی.


یعنی htmlpurifier خودش escape نمیکنه ؟!
خیر. البته تست نکردما! ولی قاعدتا نباید بکنه چون ربطی به اون قضیه نداره و نباید سرخود همچین کاری بکنه.


اگر بخوایم ازش استفاده کنیم قبل از mysql_real_escape_string یا بعدش ؟!
قبلش.


ببینید من اول میام MSG رو میگیرم ! بعد stripslashes میکنم و بعد mysql_real_escape_string ! و بعد میریزم توی دیتابیس ! همینقدر کافیه ؟!
بعد موقع خروج از دیتابیس میام htmlpurifier میکنم !
حله همه چی ؟!

فقط اگر magic_quotes_gpc روشن بود stripslashes کن.
بنظرم حل باشه!
یا قبل از درج در دیتابیس و قبل از mysql_real_escape_string از htmlpurifier استفاده کن، یا همینطور که گفتی هربار بعد از دریافت از دیتابیس.

eshpilen
پنج شنبه 28 دی 1391, 07:39 صبح
یا همینطور که گفتی هربار بعد از دریافت از دیتابیس.
البته اینکه هر بار htmlpurifier رو اجرا کنید ممکنه پردازش زیادی مصرف کنه. چون بهرحال داره کلی parse میکنه با رگولاراکسپرشن و این حرفا.
اگر نیازی نیست فکر کنم بهتر باشه یک بار در همون ابتدا قبل از درج در دیتابیس از htmlpurifier استفاده کنید.

siavashsay
پنج شنبه 28 دی 1391, 10:13 صبح
ممنونم !

لا اینطور کارها دیگه باید حرفه ای باشی خودت. باید بخونی و بفهمی و دربیاری. بدونی چی به چیه
میدونم ! کاملا واقفم ! اما ازونجایی که PHP رو خودم یاد گرفتم و استادی نبوده که بهم گوشزد کنه یه سری چیزها رو واسه همین حساسم ! مخصوصا واسه این پروژه ای که دارم !
یک وبسایت هست که کاملا با پول اینترنتی PAYPAL و غیره کار میکنه و خارجیه و هیچ ربطی به ایران نداره !
امنیتش باید فوق العاده باشه ! واسه همین کوچکترین باگ میتونه واسم صدمه ساز و هزینه ساز باشه !

لبته اینکه هر بار htmlpurifier رو اجرا کنید ممکنه پردازش زیادی مصرف کنه. چون بهرحال داره کلی parse میکنه با رگولاراکسپرشن و این حرفا.
اگر نیازی نیست فکر کنم بهتر باشه یک بار در همون ابتدا قبل از درج در دیتابیس از htmlpurifier استفاده کنید.
این هم حرفیه ! از طرفی جمله آقای Unique هم درست بود که گفتن در اون صورت اطلاعات اصلی رو دارید ! ( یعنی بعد از خروج از دیتابیس از htmlpurfier استفاده کنم !
اما ازونجایی که احتمالا بازدید سایت زیاد میشه و ترافیک میره بالا و در نتیجه نیاز به سرعت و فشار کمتری روی سرور دارم پس باید قبلش این کارو انجام بدم !:)
ممنونم در هر صورت :)

Unique
جمعه 29 دی 1391, 12:43 عصر
لبته اینکه هر بار htmlpurifier رو اجرا کنید ممکنه پردازش زیادی مصرف کنه. چون بهرحال داره کلی parse میکنه با رگولاراکسپرشن و این حرفا.
اگر نیازی نیست فکر کنم بهتر باشه یک بار در همون ابتدا قبل از درج در دیتابیس از htmlpurifier استفاده کنید.

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

در مورد سرعت معمولا این تغییرات توی اطلاعات پروفایل کاربر و comment ها و این چیزهاست ! راستش من اینها را cache میکنم برای همین اصلا سرعتش اهمیت پیدا نمیکنه. اما باز هم بعید میدونم چند میلی ثانیه برای مثلا 5 کیلو بایت متن مشکلی پیش بیاره.

engmmrj
جمعه 29 دی 1391, 12:50 عصر
راستش من اینها را cache میکنم
چطوری میشه cache کرد؟
اگه ممکنه یه منبع آموزشی معرفی کنید

Unique
شنبه 30 دی 1391, 02:18 صبح
توی همین انجمن جسجو کنید یادمه مباحث زیادی مطرح شده.