PDA

View Full Version : سئوالی در مورد امنیت داده ها



محمد شهرکی
سه شنبه 09 خرداد 1391, 19:09 عصر
سلام

شرمنده دو سه تا سئوال دارم ::قلب:
1- می خواستم بدونم آیا این امکان وجود دارد که کاربری فایل های js‌ سایت رو دانلود کنه و مقادیری که به صورت Ajax به سمت سرور ارسال میشه رو تغییر بده ؟

2- چطوری می تونم سطوح دسترسی Permission ها رو ست کنم .

3- چطوری می تونم مانند دیدن شاخه هایه یک پوشه وقتی که کاربر در نوار آدرس به صورت دستی آدرس را وارد می کند بشم ؟ Page Not Found

4- غیر از کاراکتر های ' & ؟ ! OR AND or and = + $ آیا کاراکتر دیگه هم هست که بایست فیلتر بشه ؟

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

یه دنیا ممنون :لبخندساده:

eshpilen
چهارشنبه 10 خرداد 1391, 08:56 صبح
سلام

شرمنده دو سه تا سئوال دارم ::قلب:
1- می خواستم بدونم آیا این امکان وجود دارد که کاربری فایل های js‌ سایت رو دانلود کنه و مقادیری که به صورت Ajax به سمت سرور ارسال میشه رو تغییر بده ؟

بله میشه.
البته نه لزوما به اون شکلی که شما ممکنه فکر کنی.
یه برنامهء سوکت ساده میشه نوشت که باهاش پارامترها و دیتا رو جعل کنیم. ولی با خود مرورگر و HTML و جاوااسکریپت هم میشه کارهایی کرد. ضمنا بنظرم برنامه های آماده هم هست برای این کارها که بشه باهاشون هر درخواست HTTP دلخواه رو ارسال کرد.


4- غیر از کاراکتر های ' & ؟ ! OR AND or and = + $ آیا کاراکتر دیگه هم هست که بایست فیلتر بشه ؟lol
دنبال کاراکتر و عبارت نباش. چون در هر جا و هر نرم افزار و هر سیستم و ... یک دسته ای از کاراکترها و عبارات هستن و ممکنه هر روز تغییر هم بکنن یا بین نسخه های مختلف و نرم افزارهای شرکتهای مختلف متفاوت باشن. برای هر کاری که میخوای بکنی یک داستان داره. برای دیتابیس یک داستان داره. برای HTML یک داستان داره.
شما معمولا خودت نمیای همینطور دنبال اینا بگردی و اونا رو فیلتر کنی. بلکه از روشها و توابع مخصوص و Generic تری استفاده میکنی. برای بعضی کاربردهای هم کتابخانه های آماده وجود داره. مثلا برای پاکسازی خروجی HTML ادیتورهای WYSIWYG.

MMSHFE
چهارشنبه 10 خرداد 1391, 20:00 عصر
1 و 4 رو که دوستمون جواب دادن.
2 - بستگی به هاستتون داره. در کل توی لینوکس از دستور chmod و chown توی ترمینال استفاده میشه ولی از اونجا که در هاست واقعی در اکثر مواقع به کنسول و ترمینال دسترسی ندارین، باید ببینیم از چه کنترل پانلی استفاده میکنید تا برحسب همون توضیح بدیم.
3- توی اون پوشه، یک فایل index.php بسازید و کاربر رو با کمک تابع header به خطای 404 هدایت کنید.

محمد شهرکی
یک شنبه 21 خرداد 1391, 14:06 عصر
شما معمولا خودت نمیای همینطور دنبال اینا بگردی و اونا رو فیلتر کنی. بلکه از روشها و توابع مخصوص و Generic تری استفاده میکنی. برای بعضی کاربردهای هم کتابخانه های آماده وجود داره. مثلا برای پاکسازی خروجی HTML ادیتورهای WYSIWYG.

خیلی ببخشید من تو زمینه برقراری امنیت خیلی ضعیفم میشه تابعی رو پیشنهاد و نحوه استفادش رو توضیح بدید تا حداقل بتونم امنیتی در حد مطلوب رو ایجاد کنم . ورودی های کاربر و URL فیتلر بشه .
خیلی ممنون

eshpilen
یک شنبه 21 خرداد 1391, 20:19 عصر
این مبحث یه مقدار گسترده و پیچیده است.
بستگی داره چه داده ای باشه و کجا بخواد بکار بره.
روش استفاده شده بستگی به جزییات برنامه هم داره.
یک چیزهایی کلی میشه گفت، اما در عمل جزییات و پیچیدگی و موارد بیشتری وجود دارن.

مثلا میتونیم بگیم برای درج داده های کاربر در کوئری از mysql_real_escape_string استفاده کنید. ولی این تابع همینطوری فقط برای داده های رشته ای امنیت میده و نه برای اعداد یا Identifier ها. بعد اون خودش باز داستان داره. الان یک تابع باید بنویسیم برای Escape کردن داده هایی که میخوایم در کوئری بکار ببریم. بعد تازه این تابع مثلا برای Identifier ها بازم کاربرد نداره، و برای اون موارد باید از White list استفاده کنید.

حالا این تابع رو میتونید برای داده های رشته ای و اعداد استفاده کنید و کلا غیر از Identifier:

function quote_smart($value)
{

if(is_numeric($value)) return $value;
if(get_magic_quotes_gpc()) $value = stripslashes($value);
return "'" .mysql_real_escape_string($value) . "'";

}


البته خط get_magic_quotes_gpc رو میشه به یک فایل دیگه منتقل کرد و توی این تابع انجام نشه.
مثلا من از این دستورات که در ابتدای هر فایل اینکلود میشن در پروژهء خودم استفاده کردم:

if(get_magic_quotes_gpc()) {
$_GET=array_map('stripslashes', $_GET);
$_POST=array_map('stripslashes', $_POST);
$_COOKIE=array_map('stripslashes', $_COOKIE);
}
این تابع برای پروژهء من کافی بود، اما برای برنامه هایی که داده های آرایه ای هم میگیرن نیاز به گسترش داره. مثلا اگر در POST یک متغییر بصورت آرایه وجود داشته باشه این تابع به مشکل میخوره.

موقعی که میخواید داده های کاربر رو در سورس صفحه (HTML) صفحه درج کنید هم باز چند روش بستگی به هدف و جزییات برنامه میتونه داشته باشه، ولی معمولا این یه روش کلی محسوب میشه:

htmlspecialchars($value, ENT_QUOTES, 'UTF-8');

برای پاکسازی خروجی ادیتورهای WYSIWYG هم از برنامه هایی مثل htmlpurifier باید استفاده کنید.
با کیورد htmlpurifier تاپیکهای همین فروم رو جستجو کنید، چون قبلا دربارش صحبت و تحقیق شده و طرز استفاده رو مطرح کردیم.

اینها موارد کلی و درشت متداول بود که الان حضور ذهن داشتم. درکل امنیت خیلی گسترده تر و پیچیده تر از این حرفهاست و راه کلیشه ای و راحت و سریعی برای یادگیری و بکارگیری اون وجود نداره (حداقل طبق اطلاعات و تجربهء شخصی بنده). باید زیاد مطالعه کرد و تمام جزییات رو دونست. سالها طول میکشه تا کسی در امنیت به حد کفایت برسه که بتونه هر پروژه ای رو با امنیت اصولی کافی طراحی و پیاده سازی کنه (از بنده میپرسید باید دنبال علم رمزنگاری/Cryptography هم رفت). فقط بحث Escape و فیلتر کردن دوتا دادهء کاربر هم نیست. مثلا باید جلوی انواع حمله های دیگر مثل XSRF رو هم با روشهای اصولی بگیرید. بعد کلا امنیت مربوط به هر حفره و راه نفوذ و دور زدن میشه که در هر برنامه ای میتونه متفاوت و حتی مختص خودش باشه و به جزییات و منطق و الگوریتم های برنامه برمیگرده.

محمد شهرکی
یک شنبه 28 خرداد 1391, 23:39 عصر
اگه میشه در رابطه White list و همینطور حلمه هایه XSRF و نحوه مقابله اصولی با اون توضیح بدین

MMSHFE
دوشنبه 29 خرداد 1391, 11:13 صبح
مثلا من از این دستورات که در ابتدای هر فایل اینکلود میشن در پروژهء خودم استفاده کردم:

if(get_magic_quotes_gpc()) {
$_GET=array_map('stripslashes', $_GET);
$_POST=array_map('stripslashes', $_POST);
$_COOKIE=array_map('stripslashes', $_COOKIE);
}
این تابع برای پروژهء من کافی بود، اما برای برنامه هایی که داده های آرایه ای هم میگیرن نیاز به گسترش داره. مثلا اگر در POST یک متغییر بصورت آرایه وجود داشته باشه این تابع به مشکل میخوره.

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


function s_slashes($value) {
if(is_array($value)) {
foreach($value as $item) {
s_slashes($item);
}
}
else {
return stripslashes($value);
}
}
$_COOKIE = array_map('s_slashes', $_COOKIE);
$_GET = array_map('s_slashes', $_GET);
$_POST = array_map('s_slashes', $_POST);

موفق باشید.

soroush.r70
دوشنبه 29 خرداد 1391, 15:05 عصر
یه سوال به جای value$ چه متغییر هایی رو می تونم بدم.

MMSHFE
دوشنبه 29 خرداد 1391, 19:19 عصر
اون متغیر، مقدار ورودی تابع هست. هر چیزی که بخواین میتونید براش بفرستین و این تابع، بعد از فرستادن اون مقدار به تابع stripslashes، نتیجه رو برمیگردونه که میتونید دوباره توی همون متغیر ذخیره کنید.

php_love
سه شنبه 30 خرداد 1391, 16:55 عصر
سلام میشه در رابطه با اعتبار سنجی Identifier ها هم تابعی مثال بزنید و اینکه آیا وقتی از MD5 استفاده می کنیم نیاز به استفاده از تابعی که معرفی کردید (quote_smart) هست یا خیر ؟