PDA

View Full Version : سوال: Password Generatorساخت



sims_r_z
چهارشنبه 31 خرداد 1391, 11:35 صبح
سلام می خواستم button در صفحه ثبت نام برای کاربر باشه به نام Password Generator که وقتی روش کلیک میکنه پاسورد خودکار بسازه وبهش درهمون لحظه نشون بده لطفا نحوه کارو توضیح بدید با تشکر

lady64
چهارشنبه 31 خرداد 1391, 12:32 عصر
اگه منظورتون ایجاد کد رهگیری هست از این تاپیک ایده بگیرید.
http://barnamenevis.org/showthread.php?323456-چطوری-کد-رهگیری-تولید-کنم-بعد-تو-databaseذخیره-کنم&highlight=%DA%86%D8%B7%D9%88%D8%B1%DB%8C+%DA%A9%D8 %AF+%D8%B1%D9%87%DA%AF%DB%8C%D8%B1%DB%8C+%D8%AA%D9 %88%D9%84%DB%8C%D8%AF+%DA%A9%D9%86%D9%85+%D8%A8%D8 %B9%D8%AF+%D8%AA%D9%88+database%D8%B0%D8%AE%DB%8C% D8%B1%D9%87+%DA%A9%D9%86%D9%85

djsaeedkhan
چهارشنبه 31 خرداد 1391, 14:02 عصر
سلام
البته شما می تونید توسط یکسری تابع های جاوا اسکریپت و یا جی کوری این کارو انجام بدید. بایداز یکسری توابع در هم ساز استفاده کنید که هم از اعداد و حروف و کاراکتر یه رشته درست کنه

pejman_view
چهارشنبه 31 خرداد 1391, 14:23 عصر
سلام
اتفاقاً امروز داشتم سر رویی به یکی از آموزش هام می کشیدم که در آن روش ساخت کد فعال سازی را داده بودم که خالی از لطف نیست که به شما نحوه کارش را بدهم


function mkActivation($string=""){ // be soorate kamelan ebtekari man oomadam ye tabe sakhtam ke baraye shoma ye activation code besaze
$key = array ('Q','q','W','w','r','R','T','t','z','Z','1','3',' 2','@','-','_','!'); //16ta charachter ro be soorate random entekhab kardam mitunid in ro bast bedid va tedad characterasho bishtar konid.
$randomString = NULL;
for($i=0;$i<5;$i++){ //mikhaym ba ye halghe ye reshteye random az characterhaye bala dorost konim kare kheyli asooniye man toole reshtero hamooontor ke mibinid 5 entekhab kardam
$rnd = rand(0,16); //in tabe karash sakhte adade random ast va hamoontor ke inja mibinid man be tabe goftam adadi beyne 0 ta 16 (bar migarde be tedade characterha dar moteghayere $key) behemoon bargarde.
$randomString .= $key[$rnd]; //dar inja oon adade moteghayero gozashtam too $key farzan $key['3'] baraye ma W ro bar migardoone.
}
return $randomString]);
}


ماشاء الله که کدهای جاواسکریپت خیلی آسان هستند اگر با این کد PHP یاد گرفتی چیکار کنید به راحتی می توانید جاوا اسکریپت آن را هم بنویسید، اگر هم خواستی امر بفرمایید تا تبدیلش کنم به جاوا اسکریپت...

armsoftpc
چهارشنبه 31 خرداد 1391, 15:18 عصر
به نام خدا
و با سلام
اینم کد تولید پسورد:

function generate_password($length=9, $strength=0) {
$vowels = 'aeuy';
$consonants = 'bdghjmnpqrstvz';
if ($strength & 1) {
$consonants .= 'BDGHJLMNPQRSTVWXZ';
}
if ($strength & 2) {
$vowels .= "AEUY";
}
if ($strength & 4) {
$consonants .= '23456789';
}
if ($strength & 8) {
$consonants .= '@#$%';
}

$password = '';
$alt = time() % 2;
for ($i = 0; $i < $length; $i++) {
if ($alt == 1) {
$password .= $consonants[(rand() % strlen($consonants))];
$alt = 0;
} else {
$password .= $vowels[(rand() % strlen($vowels))];
$alt = 1;
}
}
return $password;
}

پیروز باشید.

eshpilen
چهارشنبه 31 خرداد 1391, 15:29 عصر
اصولا اول باید تابع رندوم امنیتی داشت و بعد باهاش پسورد و کد فعال سازی و غیره تولید کرد.
95% روشها و کدهایی که پیدا کنید مشکل امنیتی دارن به همین خاطر.
تابع rand یک تابع رندوم امنیتی نیست و برای کاربردهای امنیتی و رمزنگاری نباید استفاده بشه؛ همینطور است تابع mt_rand؛ همینطور است روشهایی مثل mircrotime و روشهای ابتکاری مشابهی که بیشتر افراد از خودشون اختراع میکنن، همینطور به تابع رندوم جاوااسکریپت اغلب نمیشه اتکا کرد.

البته طبیعتا ظاهر کار برای شما انجام میشه، اما از نظر اصول و اطمینان و دقت امنیت واقعی مطلب بی پایه و خدشه داره.
البته در وب و حمله های آنلاین معمولا نسبت به این مسئله اغماض میشه که در عمل هم تاحدی مشکلی ایجاد نمیکنه، بخاطر اینکه سرعت Brute-force آنلاین خیلی کمتر از آفلاینه. ولی بازهم تضمینی برای امنیت وجود نداره و در خیلی موارد خیلی بیش از حد اغماض میشه (چون اون اغماضی هم که کم و بیش جا داره اغلب ناآگاهانه و کورکورانه صورت میگیره). ضمنا اگر پسورد به هر شکلی مورد حملهء آفلاین قرار بگیره اونوقت ضعفش خیلی اساسی تر میشه؛ مثلا اگر از اون پسورد یا کلید برای رمزنگاری یک فایل استفاده شده باشه و اون فایل در معرض حملهء آفلاین قرار بگیره اونوقت امنیتش هیچوقت نمیتونه درحد حرفه ای باشه، یا مثلا اگر هش اون پسورد به هر شکلی مثل نفوذ به دیتابیس در دسترس نفوذگر قرار بگیره و مورد کرک واقع بشه، اونوقت کرک کردنش میتونه خیلی راحت تر باشه بخاطر اینکه در تولیدش از یک تابع رندوم امنیتی استفاده نشده.

بنابراین باید اول یک روش تولید اعداد رندوم با ایمنی کافی رو تهیه کرد.

ravand
چهارشنبه 31 خرداد 1391, 20:24 عصر
یکی از بچه ها یه مثال ساده زد :

<?php
$chap=time().date('Y.j.n').rand();
echo $chap;
?>

eshpilen
چهارشنبه 31 خرداد 1391, 21:02 عصر
rand که تابع ضعیفی هست از نظر امنیتی، استفاده از زمان هم مشکل زیادی رو حل نمیکنه، چون پارامتر زمان در خیلی موارد میتونه کم و بیش مشخص باشه.
امنیت این ترکیب طبیعتا مقداری افزایش پیدا کرده، اما به امنیت حرفه ای حتی نزدیک هم نمیشه.

pejman_view
پنج شنبه 01 تیر 1391, 08:12 صبح
سلام به کاربر گرامی esphilen

سوالی داشتم که گفتم شاید بتوانید جوابم بدهید به من بگویید دائماً در پاسخ هایتان می دیدم که می گفتید تابع رندوم امن نیست و ...
من با فرض اینکه تابع خودم را بصورت عمومی منتشر کردم بگم این تابعی که من با این تابع کدهای فعال سازی خودم را می سازم...
اگر به کد من نگاه کنید فقط از 16 کاراکتر استفاده کردم که زیاد حال نداشتم وارد کنم چون برای یه فایل آموزشی بود.
با فرض اینکه کد فعال سازی من 16 کاراکتر باشد تقریبا با احتمالی در مقابل : 18446744073709551616 مواجه خواهد شد! که نمی تونم حتی بصورت ریاضی بخوانمش حالا می گم هکر هم بتواند در ثانیه یک میلیون پردازش از طریق بروت فورس انجام بده نزدیک به 600 هزار سال طول می کشه که پیداش کند. البته این عددی که گفتم با احتمال اینکه طرف بد شانس باشه و در آخرین رمزی که می زنه پیداش کنه.
البته هیچی غیر ممکن نیست... ممکن خوش شانس باشه با اولین عدد 16 رقمی پیداش کنه.
اما سوال اینجاست: یک کد 16 رقمی واقعاً اینقدر ارزش داره که 600 هزار سال نه ! یکماه زمان بگذارن روش! اگر اینقدر ارزش داره مثلاً چه می دونم مسائل ملی یک کشور با آن کد بشه فاش کرد پس بدون طرف از چنین روشی استفاده نخواهد کرد و آن هکر هم از بروت فورس استفاده نخواهد کرد بنظر من بروت فورس یک روش نا کارآمد و زمان بر است.
اگر هکر، هکر بود! می رفت دنبال یه چیزه دیگه!
می دانم خیلی به مسائل امنیتی از این قبیل علاقه داری بخاطر همین به شما بعنوان یک دوست پیشنهاد می کنم زیاد روی این مسائل مانور ندید چون مسائل خیلی پیچیده و زیباتر در امنیت و نفوذ هست. من بعنوان یک هکر حداقل دیدم برای باز کردن یک کد فعال سازی به روش های دیگر معطوف می کردم مانند نفوذ به سیستم از طریق باگ های امنیتی و نفوذ به دیتابیس از طریق اینجکشن یا هر چیز مشابه...
نمی گم مسائل مهم نیست ، مهم است اما مواردی هستند شاید مهمتر.

با آرزوی موفقیت.

asonline
پنج شنبه 01 تیر 1391, 12:05 عصر
میتونی چند کد رو همزمان با هم تلفیق کنی:


$a = array('character 1', 'character 2');
$ar = array('_','-', '#', 'sign 1', 'sign 2');
$n = rand(100,999);
$r = array_rand($a).array_rand($ar).$n;

در این کد شما در متغیر $a کاراکتر های دلخواه خود را قرار می دهید
و در متغیر $ar علامت های دلخواه خود را به کار می برید
و در متغیر $n یک عدد 3 رقمی از 100 تا 999 رو ایجاد می کنه
و در آخر هم در متغیر $r مقدار تصادفی ذخیره میشه
فقط یه چیز رو بگم که هکر ها با روش کرک می تونن به این مدل پسورد ها دست یابند به همین دلیل می تونید در صفحه لاگین از کد captcha استفاده کنید
البته این را هم بگم که هر کاری بکنید باز هم نمی توانید امنیت صد درصد را برقرار کنید چون بعضی از هکر ها با سرریزی بافر می توانند کد های خود را در سایت شما به اجرا در آورند بهترین کار استفاده از هاستینگی است که متخصص های امنیتی روی آن کار می کنند و به محض فهمیدن نفوذ کسی به سایت شما به شما اطلاع می دهند و با او نیز مقابله می کنند

eshpilen
پنج شنبه 01 تیر 1391, 17:14 عصر
اگر به کد من نگاه کنید فقط از 16 کاراکتر استفاده کردم که زیاد حال نداشتم وارد کنم چون برای یه فایل آموزشی بود.16 تا نیست. 17 تاست.


با فرض اینکه کد فعال سازی من 16 کاراکتر باشد تقریبا با احتمالی در مقابل : 18446744073709551616 مواجه خواهد شد! که نمی تونم حتی بصورت ریاضی بخوانمش حالا می گم هکر هم بتواند در ثانیه یک میلیون پردازش از طریق بروت فورس انجام بده نزدیک به 600 هزار سال طول می کشه که پیداش کند. البته این عددی که گفتم با احتمال اینکه طرف بد شانس باشه و در آخرین رمزی که می زنه پیداش کنه.
اینکه میگید چه ربطی به تابع رندوم امن داره؟
ساخت کدفعال سازی فقط یکی از کاربردهای تابع رندوم و تنها یکی از نیازهای برنامه های وب است.
کد فعال سازی از نظر امنیتی حساسیت و آسیب پذیریش کمتره معمولا، چون هم عمر محدودی داره (مثلا 24 ساعت یا حداکثر تا یک ماه که بیشتر اعتبار نداره معمولا) که در نتیجه فرصت Brute-force خیلی محدودی میده و هم تنها بصورت آنلاین قابل استفاده هست و بحث حمله های آفلاین رو نداره.

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

ضمنا محاسبات شما و عددی که بدست آوردید ممکنه اصلا درست نباشه.
موضوعی که بنده مدام بهش اشاره میکنم همینه که وقتی تابع رندوم شما تابع رندوم امنیتی نیست، اساس کار شما مشکل داره و بقیهء چیزهایی هم که با اون ساخته میشن نمیتونن امنیت بالاتری داشته باشن (حکایت خشت اول چون نهاد معمار کج...). بنابراین محاسبات شما لزوما برقرار نیستن.

حالا حق دارید دلیل و مدرک و توضیح بیشتر بخواید.

پس بهتون میگم:

یکی از دلایل اینه که seed ای که تابع rand باهاش کار میکنه از نوع عدد صحیح است. seed در توابع رندوم خیلی مهمه، و اگر یک الگوریتم تابع رندوم رو با یک seed مشخص استارت کنید، همیشه توالی اعداد یکسانی دریافت میکنید.
مثلا کد زیر رو:

<?php
srand(5);
for($i=0; $i<10; $i++) echo rand(0, 16), ' - ';
?>
هرچند بار که اجرا کنید این نتیجه رو دریافت میکنید:

7 - 3 - 11 - 3 - 0 - 11 - 0 - 5 - 16 - 10

بنابراین، اگر هکر seed رو داشته باشه یا بتونه خروجی الگوریتم تولید پسورد یا کلید تصادفی رو با تمام seed های ممکن تست کنه، پسورد یا کلید شما کشف میشه. چه طول پسورد شما 6 کاراکتر بوده باشه و چه 500 کاراکتر. محاسبهء شما هم به همین علت میتونه غلط باشه که شما نمیتونید با افزایش طول رشتهء رندوم و/یا کاراکترهای ممکن برای هر مکان، از امنیت فضای seed تابع rand امنیت بیشتری بدست بیارید. بطور استاندارد و معمول، حداکثر امنیت شما برابر امنیت seed ای هست که تابع رندوم مورد استفادهء شما استفاده میکنه.

اندازهء یک عدد صحیح روی یک سخت افزار 32 بیتی 4 بایت یا 32 بیت است. بنابراین فضای seed تابع rand روی ماشین های 32 بیتی برابر 2 به توان 32 است. و مقدار 2 به توان 32 خیلی کمتر از اون عدد 16 به توان 16 است که شما حساب کردید.
امنیت 2 به توان 32 حالت رو با همون فرض یک میلیون تست در ثانیه که گفتید اگر بسنجیم، در کمی بیشتر از یک ساعت میشه تمام حالتهاش رو تست کرد:

2^32/1000000/60/60~=1.2

خب احتمالا الان شما شانس آوردید که سخت افزارهای 64 بیتی خیلی وقته اومدن و احتمالا درحال حاضر تقریبا تمام سرورها 64 بیتی هستن و بنابراین تابع rand با seed ای برابر 64 بیت کار خواهد کرد و بنابراین امنیت خیلی بیشتری خواهد داشت. البته بنده آمار سرورها رو ندارم و این رو فقط حدس زدم. شاید هم هنوز سرورهای 32 بیتی در بعضی جاها استفاده بشن. ضمنا در شبکه های محلی و اینترانت و این حرفها احتمالش خیلی بیشتر میشه که سخت افزار 32 بیتی مورد استفاده قرار بگیره.
پس تا اینجا شما روی یک شانس اونم ناآگاهانه متکی هستید. درحالیکه امنیت اصولی و حرفه ای هرگز نباید بر شانس و مسائل غیرقابل پیشبینی و غیرقابل کنترل استوار باشه. کسی هم به شما تضمین نمیده که برنامتون فقط روی سخت افزار خاصی اجرا بشه.
شاید هم یوقت من اومدم موقتا هم که شده، از این تابع روی رایانهء 32 بیتی خودم استفاده کردم (شاید حتی بصورت آنلاین)؛ نتیجه این میشه که تمام کلیدها و پسوردهایی که با چنین تابعی ایجاد بکنم امنیت بسیار کمتر از حد انتظار خواهند داشت و چه بسا کسی که این قضیه رو بدونه یا کشف کنه یا حدس بزنه بتونه از این ضعف کمال سوء استفاده رو بکنه.

امنیت برنامه باید به سخت افزار و محیط اجرا وابسته نباشه (حتی الامکان). مثلا شما نمیتونید بگید برنامهء منو اگر روی رایانهء 32 بیتی اجرا کنید امنیت نداره، نمیتونید بگید در LAN و اینترانت امنیت نداره. البته تونستنش که میتونید بگید، ولی نشانهء ضعف و ناتوانی خودتونه، چون اگر بقدر کافی حرفه ای عمل میکردید میتونست اینطور نباشه. ضمن اینکه اصلا شما در درجهء اول از این مسائل آگاه نبودید که بخواید راجع بهش چیزی بگید و هشداری بدید! این دیگه بدتر!!

ضمنا حتی با یک سیستم 64 بیتی هم هیچوقت نمیشه با تابعی که شما طراحی کردید به امنیت بیشتر از 2 به توان 64 رسید. و 2 به توان 64 برای چیزهایی مثل کد فعال سازی کافیه، اما برای خیلی چیزها مثل پسوردها و کلیدهای رمزنگاری کافی نیست. طبق مطلب و منابع معتبری که قبلا ارائه کرده بودم، امنیت استاندارد و توصیه شده رسمی برای پسورد الان 80 بیته (بعضی منابع میگن برای امنیت بالا و بعضی ها بعکس میگن بعنوان یک حداقل!). برای کلیدهای رمزنگاری هم 128 بیت یک حداقل استاندارده، مگر اینکه امنیتش فقط در کوتاه مدت مد نظر باشه تا بتونیم یک مقداری ازش کم کنیم.

پس تابع شما عملا حرفه ای نیست، و خیلی کمتر از حرفه ایه.

تازه اینا تنها اشکالات تابع rand نیست.
وقتی تابعی رسما برای مصارف امنیتی و رمزنگاری طراحی نشده، شما نمیتونید از هیچ کجاش مطمئن باشید. مثلا از کجا مطمئن باشیم که روی سیستمهای 64 بیتی از همون امنیت ناقص 64 بیت هم برخوردار خواهیم شد؟ آیا از ساختار داخلی rand اطلاع دارید؟ تستش کردید؟ سندی دارید؟ طراحانش تضمینی در این زمینه دادن؟ بنده شخصا از این امر مطمئن نیستم، چون اطلاعات و تحقیقات کافی نداشتم و دلیل و سند محکمی ندارم براش. چه بسا پیش آمده که به یک دلیل فنی خاصی اومدن و یک طور دیگه عمل کردن. بارها اینو دیدم.

امنیت حرفه ای هیچوقت نمیتونه اینقدر روی حدس و گمان و کورکورانه و شانسی استوار بشه.
تا اینجا همش شد حدس، خدشه، ضعف، تصادف، خوشبینی، شانس.

بعنوان یه مشکل دیگه، seed خودکار تابع rand چطور تولید میشه؟ میدونید؟
معمولا از چیزهایی مثل زمان جاری و Process id پردازش جاری برای تولید یک seed خودکار برای اینطور توابع غیرامنیتی استفاده میشه (mt_rand اینطوره - قریب به یقین برای rand هم کم و بیش همینطوره).
حالا تازه دوباره خر بیار و باقالی بار کن. همین استفاده از زمان جاری و PID برای تولید seed باز خودش یه مشکل قابل توجه امنیتی هست که ممکنه امنیت رو حتی از چیزی که تاحالا محاسبه کردیم پایینتر هم بیاره. چون چیزهایی مثل زمان و PID برای مقاصد امنیتی و رمزنگاری دارای Entropy کافی نیستن و خیلی وقتها هکر میتونه محدودهء اونها رو براحتی تا حد زیادی محدود بکنه. مثلا در خیلی موارد هکر میتونه زمانی رو که کلید یا پسوردی تولید شده با دقتی تا یک روز، 12 ساعت، چند ساعت، دقیقه و حتی گاهی ثانیه و حتی گاهی کسری از ثانیه کشف کنه یا حدس بزنه یا با ترفندی محدود بکنه، و این باعث میشه حالتهای ممکن برای پارامتر زمان خیلی محدودتر بشه. همینطور PID هم باز یک منبع واقعی و امنیتی برای Entropy نیست و میتونه در خیلی موارد به شدت محدود بشه و بطور کلی هم ممکنه تعداد حالتهای زیادی نداشته باشه.

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

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



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

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

eshpilen
پنج شنبه 01 تیر 1391, 20:49 عصر
بله خلاصه ما یک تابع رندوم امن لازم داریم. چیز کم اهمیتی نیست.
تابعش رو هم که دادم خدمتتون: http://barnamenevis.org/showthread.php?347077

درسته مسائل امنیتی دیگری هم هستن. SQL Injection / XSRF / XSS و غیره. هرکدام به جای خودشون. ولی این تاپیک درمورد تولید پسورد رندوم بود که بنده هم مسئلهء کاملا مرتبط و مهمی رو در این ارتباط بیان کردم.

در تاپیک های دیگر درمورد موارد دیگر هم فکر میکنم بقدر کافی هم بنده و هم دیگران صحبت کرده باشن.
بعد هم چیزهایی مثل SQL Injection / XSRF / XSS اینا رو خیلی ها میدونن و از پسش برمیان. خیلی پیچیده و علمی نیستن. زیاد درموردشون بحث شده. مطلب و راه حل و کدهای زیادی هست در نت درموردشون.
ولی در عین حال میبینی همیشه تعداد زیادی از افراد در این موارد هم مشکل دارن و حرفهای خنده دار میزنن، راه حلهای خنده دار و ضعیف و اشتباه میدن، مکانیزم و روش جلوگیری رو واقعا درک نکردن.
اینا همه نشان دهندهء سطح پایین دانش و توانایی در زمینهء امنیته. که البته عجیب هم نیست.
در زمرهء این افراد همون به اصطلاح هکرهای مورد اشارهء شما هم هستن! (که بنده میگم باید گفت جوجه هکر)

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

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

فکر کن جلوی SQL Injection / XSRF / XSS رو گرفتی، اونوقت تابع رندوم ناامن میتونه امنیت سیستم رو بیاره پایین و حتی به شکست های جدی منجر بشه.

اینم که همه روی SQL Injection / XSRF / XSS متمرکز هستن (و البته بیشتر هم اون دوتای به غیر از XSRF) بخاطر راحتیش و باگهای زیاد در این زمینه هاست و اینکه نیاز به تخصص و ابزار و منابع قابل توجهی نداره. درواقع بیشتر (جوجه) هکرها اونقدری سواد نداشتن و پیشرفته نبودن که بتونن از ضعف تابع رندوم استفاده کنن، اما همیشه افرادی بودن و هستند و خواهند بود که بتونن اینطور کارها رو هم انجام بدن.

برای شما شاید SQL Injection خیلی مهم باشه، اما برای یک حرفه ای جلوگیری از SQL Injection نباید کار سختی باشه. شما جلوی SQL Injection رو میگیری و به خیال خودت کلی ابتکار میکنی و خلاقیت به خرج میدی، ولی از نظر بنده اونقدر چیز بزرگی نیست. هنوز برنامه های شما مونده درحد SQL Injection! خیلی هنر کنید جلوی XSS رو هم کامل میگیرید. XSRF رو هم که میتونم بگم 90% افراد کاری بابتش نمیکنن و خیلی ها اصلا نمیدونن واقعا چی هست و چطور عمل میکنه، چه برسه به اینکه بخوان روش اصولی جلوگیریش رو طراحی و پیاده سازی کنن.
بله برای شما تابع رندوم امن بنظرم اونقدرها هم اهمیت نداره. بقول معروف مورچه چیه که کله پاچش چی باشه!!

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

شاید اونم که روی شیء گرایی و چیزهایی مثل بکار بردن MVC خوب وارده از برنامهء من خوشش نیاد، چون شیء گرا نیست و همینطور صاف کد نوشتم. ولی امنیت یکی از اولویت های اصلی هست در وب. و بدون شیء گرایی هم میشه برنامهء امن و از نظر منطق و الگوریتم و امکانات بی نقص نوشت. کسی که واقعا وارد باشه اگر سیستمها و ابتکارهای امنیتی برنامهء بنده رو ببینه متوجه میشه که کار واقعا حرفه ایه و یه چیزی فراتر از کارهای دیگران.

من واقعا برام جالبه که شما گفتید «مسائل خیلی پیچیده و زیباتر در امنیت و نفوذ هست». چند مورد از این مسائل خیلی پیچیده تر و زیباتر رو میشه بعنوان نمونه بفرمایید؟
احتمالا منظورتون همون SQL Injection و این حرفا نبود؟
اونوقت اینا خیلی پیچیده و زیباتر هستن؟ چطور؟ چجوری؟ چرا؟
SQL Injection که میشه با یک تابع و رعایت چندتا اصول ساده جلوش رو گرفت مثلا خیلی پیچیدس؟
البته اگر از دید هکری نگاه کنی شاید پیچیده و جالب باشه. ولی برای من اون هکر آدم خیلی پیچیده و جالبی نیست و با یک تابع جلوش رو میگیرم و تمام هنر و مهارتش رو Null میکنم!!
تمام قدرت اون هکر روی یک خطای انسانی طبیعی یا یک مورد حفرهء ناشی از کم سوادی بنا شده. نیازی نداره خیلی باهوش و دانشمند باشه.
اصولا هکرها آدمهای سطحی یا فاسدی هستن.
ساختن و امن کردن دشوارتره طبیعتا. خراب کردن و نفوذ کردن ساده تره.
بالاخره هر آدمی هرچقدر هم که سواد و مهارت داشته باشه و تلاش کنه ممکنه یه جایی یه چیزی از زیر دستش در بره. خطای انسانی بالاخره پیش میاد. اما اون هکر میاد همون یه خطا رو میگیره و گند میزنه به کار طرف. درحالیکه طرف کلی زحمت کشید و کلی سیستم پیاده کرده و واقعا هم کار درست بوده بنده خدا. بنظر شما کار هکر بزرگتر و دشوارتر بوده یا کار اون سازنده؟
این هنر نیست که ایرادها رو بگیریم و سوء استفاده و گنده کنیم. برای درست کردن یک چیزی صدها نکته و سیستم نیازه، ولی برای خراب کردن یک نکته و یک چیز میتونه کاملا کافی باشه.
یه ساختمان مدرن با طراحی و امکانات پیشرفته و زیاد رو چقدر باید زحمت کشید، سواد داشت، وقت گذاشت، هزینه کرد تا طراحی کرد و ساخت، ولی کل اون ساختمان رو میشه در مدت بسیار کوتاهتری با زحمت خیلی کمتری با سواد خیلی کمتری، کاملا تخریب کرد (مثلا با مواد منفجره). حتی میشه با یک بمب در چند ثانیه نابودش کرد. ولی راست میگی یه چیزی بساز. تابع رندوم امنیتی طراحی کن. امنیت علمی و اصولی رو بنا کن. نه اینکه از یکسری ضعفها و اشتباهات پیش پا افتادهء باستانی استفاده کنی برای تخریب و خودنمایی و فکر کنی خیلی نابغه و دانشمند هستی.