PDA

View Full Version : کمک برای امنیت



mamali-mohammad
جمعه 21 مرداد 1390, 00:14 صبح
سلام
من یه سایت نوشتم
میخوام از لحاظ امنیتی چکش کنم
چه راهی پیشنهاد میدید ؟
ممنون

binyaft
جمعه 21 مرداد 1390, 11:19 صبح
10 میلیون بار از این تاپیک ها تو انجمن ها زده شده ، همه هم توضیح داده شده !!!!!
روش های هک برنامه های وب زیاده ، روش ها ببینید چیه ، راه های مقابله رو پیاده کنید ..
معروفشون هم XSS , SQL injection هست

mamali-mohammad
جمعه 21 مرداد 1390, 12:03 عصر
شما از این 10 میلیون تاپیک ، میشه 10 تاشو لیست کنی ؟
تا ما هم یاد بگیریم
ممنون

mohsen6500
جمعه 21 مرداد 1390, 13:34 عصر
سلام دوست عزیز
راستی من هم خیلی خیلی با این تاپیک های تکراری برخورد داشتم
قرار نیست که هرتاپیکی رو دیدم بنویسم
هروقت میخوام تاپیک ایجاد کنم قبلش یه جستجو تو سایت میکنم
اگر نبود اونوقت تاپیک جدید رو ایجاد میکنم
شما هم کافیه یه زحمت به انگشتان مبارک بدید و توی جستجو عبارت مورد نظرت رو بنویسید
و کمی زحمت دیگه روی جستجو کلیک کنید
موفق باشی

eshpilen
جمعه 21 مرداد 1390, 14:56 عصر
امنیت مقوله گسترده و پیچیده ایست.
تاحالا تاپیک و مقاله ای به فارسی ندیدم که حتی نزدیک به کامل بودن باشن. گذشته از اینکه موارد متعددی بینشون دیدم که اشتباه و نقصهای کوچک یا بزرگی در همون موارد مطرح شده داشتن.
اما بعنوان یه نمونه این تاپیک (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&highlight=) رو نگاهی بکنید.
شاید بگید چون تاپیک خودمه معرفیش کردم. اما اینطور نیست. مواردش رو هم از یه منبع معتبر گلچین کردم (منبعش رو در پایینتر آوردم) و همچنین راهکارهایی که ارائه شدن بر اساس توصیه های اون منبع هستن. اول اون منبع رو کامل و دقیق خوندم، بعد مطلب دادم.
ضمنا بنده فقط حمله های مهمی رو که بنظرم در بیشتر سایتها موضوعیت دارن توش لیست کردم و بعضی راهکارهای استاندارد و پایه در حالت عمومی و اولیه رو برای بعضی هاش توضیح دادم، وگرنه انواع حمله ها بیشتر از اینهاست که بطور مثال میتونید در این سایت (https://www.owasp.org/index.php/Category:Attack) مشاهده کنید. در خیلی از سایتها حمله های دیگر هم ممکن هست، ولی درحد ابتدایی و شروع کار برای بیشتر افراد و سایتها بنظر بنده همون موارد لیست شده مهمترین ها هستن که اگر درست و کامل پیاده سازی کنن کلی کار انجام شده!

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

mamali-mohammad
شنبه 05 شهریور 1390, 14:00 عصر
دوستان برای اینکه اطلاعات دیتابیس رو به خوبی نشون بدیم ، باید از Decode استفاده کنیم :

$text=$row["text"];
$text=htmlspecialchars_decode($text,ENT_QUOTES);
از لحاظ امنیتی مشکلی نداره ؟

A B C D
شنبه 05 شهریور 1390, 14:32 عصر
به خوبی نشون بدیم
منظورت از «به خوبی» چیه؟ :متفکر:

از لحاظ امنیتی مشکلی نداره ؟بستگی داره داده هایی که توی دیتابیس هستن از کجا اومدن و قبل از درج در دیتابیس چه تابع یا فیلتری روی اونها اعمال شده یا نشده.
مثلا اگر منبع اولیه فیلد فرم کامنت گذاری کاربر بوده و شما فقط تابع htmlspecialchars رو روی اونها اعمال کرده و بعد در دیتابیس درج کردید، اونوقت htmlspecialchars_decode که میکنی امنیت رو کلا از بین میبری.

ممکنه اصلا متن کامنت اولیه رو بصورت خام (یعنی بدون عبور از تابع htmlspecialchars) در دیتابیس درج کرده بودی، و در این حالت موقع درج اونها در صفحه باید حتما از htmlspecialchars یا یک تابع/برنامهء فیلتر دیگه استفاده کنی و کاربرد htmlspecialchars_decode هم بیهوده است.

اگر داده های کاربر حاوی فرمت HTML بوده و شما میخوای این فرمت رو حفظ کنی، باید با استفاده از برنامه هایی مثل htmLawed (http://barnamenevis.org/showthread.php?300377-%DA%A9%D9%85%DA%A9-%D9%81%D9%88%D8%B1%DB%8C%D8%9F-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%D8%A7%D8%A8%D8%B9-preg_replace&p=1320327&viewfull=1#post1320327) اون رو قبل از درج در صفحه امن کنی.

اگر داده ها از منبع قابل اعتمادی مثل خودت بوده که حاوی تگهای HTML هست و میخوای اون تگها در متن شما اثر کنن، میتونی داده ها رو مستقیما در صفحه درج کنی. ولی بهتره اگر توی دیتای شما قرار نیست چیزهایی مثل جاوااسکریپت باشه و اجرا بشه، همچنان برای احتیاط از htmLawed (http://barnamenevis.org/showthread.php?300377-%DA%A9%D9%85%DA%A9-%D9%81%D9%88%D8%B1%DB%8C%D8%9F-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%D8%A7%D8%A8%D8%B9-preg_replace&p=1320327&viewfull=1#post1320327) استفاده کنی.

mamali-mohammad
شنبه 05 شهریور 1390, 18:09 عصر
خب دقیقا مشکل همینه
زمان ذخیره از htmlspecialchars استفاده می کنیم
اما موقع نمایش استایل فونت از بین میره
چه کنیم ؟

A B C D
شنبه 05 شهریور 1390, 18:35 عصر
هان یعنی از ادیتورها WYSIWYG استفاده کرده بودید؟
خب دیگه گفتم که راهش استفاده از برنامه هایی مثل htmLawed (http://barnamenevis.org/showthread.php?300377-%DA%A9%D9%85%DA%A9-%D9%81%D9%88%D8%B1%DB%8C%D8%9F-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%D8%A7%D8%A8%D8%B9-preg_replace&p=1320327&viewfull=1#post1320327) هست که خروجی رو امن بکنن.
و اصلا از اول هم نیازی نبود از htmlspecialchars استفاده کنید. htmlspecialchars مال مواقعی هست که قرار نیست فرمت HTML در ورودی کاربر وجود داشته باشه و در خروجی هم فرمت نداره یا خودتون بهش فرمت اضافه میکنید.
حالا هم مشکلی نیست. اول htmlspecialchars_decode رو اعمال کن و بعد htmLawed (http://barnamenevis.org/showthread.php?300377-%DA%A9%D9%85%DA%A9-%D9%81%D9%88%D8%B1%DB%8C%D8%9F-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%D8%A7%D8%A8%D8%B9-preg_replace&p=1320327&viewfull=1#post1320327) رو.

البته مثلا اگر ادیتور شما فقط تگهای استایل متن رو داشته و قرار نیست در ورودی/خروجی شما چیزهای دیگه ای مثل تگ تصویر و جدول و بقیهء تگهای HTML وجود داشته باشه، بهتره نگاه کنید ببینید در خروجی ادیتور شما برای استایل های مختلفی که کاربر اعمال میکنه از چه تگهایی استفاده میشه، مثلا تگ b، تگ i، تگ font و غیره، و بعد اون تگها رو بصورت لیست سفید به htmLawed بدید تا هر تگ دیگه ای جز اونا در ورودی بود حذف یا بی اثر کنه.

mamali-mohammad
شنبه 05 شهریور 1390, 22:14 عصر
ممنون
پس با این حساب
اول mysql_escape کنم و بعدش htmlspecial کنم و ذخیره
برای فراخوانی هم decode کنم و htmlawed
آره ؟

A B C D
شنبه 05 شهریور 1390, 22:30 عصر
mysql_escape که همیشه موقع درج در دیتابیس لازمه. درمورد هر دیتایی.

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

اما در مواردی که قراره دیتا دارای فرمت HTML باشه، نیازی به استفاده از htmlspecial نیست و همون htmlawed موقع ذخیره در دیتابیس یا موقع واکشی و نمایش کافیه.

البته کلا استفاده از فرمت HTML رو شخصا توصیه نمیکنم و بهتره تنها در جایی که مجبور هستید ازش استفاده کنید.

mamali-mohammad
سه شنبه 15 شهریور 1390, 13:36 عصر
سلام
آقا من از htmlawed استفاده کردم
به این صورت ذخیره کردم در دیتابیس :

$text=mysql_real_escape_string($_POST['text']);
$text=htmLawed($text, array('safe'=>1));
برای فراخوانی هم از کد زیر :

$text=$row["text"];

زمانی که ذخیره میشه بعضی از استایل ها مثل لینک دادن ، بولد کردن و .. کار نمیکنه
چه کنم ؟

A B C D
سه شنبه 15 شهریور 1390, 15:32 عصر
جدیدا میگن بجای htmlawed از htmlpurifier استفاده کنید (http://barnamenevis.org/showthread.php?300377-%DA%A9%D9%85%DA%A9-%D9%81%D9%88%D8%B1%DB%8C%D8%9F-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%D8%A7%D8%A8%D8%B9-preg_replace&p=1330632&viewfull=1#post1330632).
شنیدی؟ :لبخند:

mamali-mohammad
سه شنبه 15 شهریور 1390, 15:44 عصر
الان به جای htmlawed از htmlpurifier استفاده کنم ؟
دلیلش چیه ؟

mamali-mohammad
سه شنبه 15 شهریور 1390, 16:47 عصر
بازم مشکل دارم
استایل رو دقیق انجام نمیده :گریه:

A B C D
سه شنبه 15 شهریور 1390, 19:28 عصر
الان به جای htmlawed از htmlpurifier استفاده کنم ؟
دلیلش چیه ؟
کلا بهتره. امنیتش هم بیشتره.

mamali-mohammad
سه شنبه 15 شهریور 1390, 19:34 عصر
از htmlpurifierاستفاده کردم
هنوزم مشکل داره

A B C D
سه شنبه 15 شهریور 1390, 19:36 عصر
مشکل که توی برنامه نویسی عادیه :لبخند:

mamali-mohammad
سه شنبه 15 شهریور 1390, 19:58 عصر
عادی هست
اما باید حل بشه دیگه
زمانی که اطلاعات ذخیره میکنم :

require_once 'htmlpurifier-4.3.0/library/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('Core.Encoding', 'UTF-8');
$config->set('HTML.Doctype', 'HTML 4.01 Transitional');
$text=mysql_real_escape_string($_POST['text']);
$purifier = new HTMLPurifier($config);
$text = $purifier->purify($text);

مشکلی داره ؟

A B C D
سه شنبه 15 شهریور 1390, 22:09 عصر
میگم خط mysql_real_escape_string رو بعد از خط $purifier->purify قرار بده ببین نتیجه تغییری میکنه یا نه. یعنی آخرین خط این کدها باشه.

mamali-mohammad
سه شنبه 15 شهریور 1390, 22:48 عصر
اینطوری :

$text=$_POST['text'];
$purifier = new HTMLPurifier($config);
$text = $purifier->purify($text);
$text=mysql_real_escape_string($text);

درست شد
درست انجام دادم ؟

A B C D
چهارشنبه 16 شهریور 1390, 00:47 صبح
نه بابا جدا درست شد؟

درست انجام دادم ؟
آره مشکلی نداره.

idocsidocs
چهارشنبه 16 شهریور 1390, 23:46 عصر
آقا یه زحمتی بکش و ببین کلاس HTMLPurifier مناسب هست یا نه و تجربه کار با این کلاس رو توی این تاپک قرار بده.

یکی از محدودیتهای این کلاس اینه که نمی تونید از تگهای object, embed به هر صورتی استفاده کنید و کلا توی این تگها محدود هستید.
لطفا بگید برای حل مشکل این تگها چه کار کردید؟

من هنوز وقت نکردم از این کلاس استفاده کنم و تستش کنم.

mamali-mohammad
پنج شنبه 17 شهریور 1390, 00:24 صبح
به head هم گیر میده

mamali-mohammad
جمعه 18 شهریور 1390, 11:11 صبح
متاسفانه به رنگ ها هم گیر میده !
آقا این محتوایی که ارسال میشه از قسمت مدیریت هست
از منبع مورد اعتماد ارسال میشه
escape کنیم کافیه ؟

idocsidocs
جمعه 18 شهریور 1390, 14:11 عصر
آقا این محتوایی که ارسال میشه از قسمت مدیریت هست
از منبع مورد اعتماد ارسال میشه
escape کنیم کافیه ؟ نه کافی نیست.

از طریق ادیتور معمولا کدهای xss تزریق می کنن که مربوط به دیتابیس نیست.

متاسفانه به رنگ ها هم گیر میده !
پس به چی گیر نمی ده؟ آیا لیست تگهای مورد اعتمادتون رو مشخص کردید؟

mamali-mohammad
جمعه 18 شهریور 1390, 14:33 عصر
من همونطور پیش فرض خودش رو گذاشتم
چطوری باید تگهارو مشخص کنم ؟

mamali-mohammad
شنبه 19 شهریور 1390, 10:57 صبح
دوستان ؟
کسی هست کمک کنه ؟

mamali-mohammad
یک شنبه 20 شهریور 1390, 15:49 عصر
دوستان عزیز
راهنمایی مکینید ؟