PDA

View Full Version : درخواست کد ساده با امنیت بالا



vb_nima
سه شنبه 01 اسفند 1391, 09:22 صبح
سلام دوستان.
من دنبال یک کد ساده برای کار زیر هستم فقط برام مهمه که امنیت بالا باشه. حالا به نظرتون چطور باید امنیتشا بالا ببرم؟ایا کدی هست مثلا اضافه کنم که امنیت بالا بره و جلوی تعدادی از حملات را بگیره/

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

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

jionelmessi
سه شنبه 01 اسفند 1391, 10:12 صبح
با سلام
با استفاده از عبارات با قاعده regular expresion میتونی تعیین کنی مثلا فقط حروف و اعداد وارد شن و علائم مثل,;' "
نتونه وارد کنه این عبارات با قاعده هم در جاوا اسکریپت است و هم در پی اچ پ

pirmard66
سه شنبه 01 اسفند 1391, 13:13 عصر
با اجازه آغاز کننده تاپیک..!

میشه بحث رو بازتر کنیم؟؟؟

به نظر من راه بسیار خوبیه که جلوی sqlinjc گرفته بشه...

اساتید یه نظری بدن...

siavashsay
سه شنبه 01 اسفند 1391, 13:17 عصر
برای username اگر فقط شامل عدد و حروف هست میتونی از تابع ctype_alnum استفاده کنی ! اما بازهم از mysql_real_escape_string استفاده کن :

if(!ctype_alnum($username)){
// set error
exit()
}
$username=mysql_real_escape_string($username);
اما اگر username رو خواستی علاوه بر حروف و اعداد کاراکتر _ ( underline ) هم قبول کنه از تابع زی که نوشتم استفاده کن :

function lnFilter($var){
$chk=preg_match('/^[a-zA-Z0-9_]+$/',$var);
if($chk==false){
return false;
}else{
return true;
}
}
$chkUsername=lnFilter($username);
if($chkUsername==false){
//set error
exit();
}
$username=mysql_real_escape_string($username);
برای password هم میتونی از sha1 استفاده کنی

$password=sha1($password);
برای اون تکست باکس دیگه هم اگر بعد نیاز به فراخوانی اون متغیر داری از sha1 استفاده نکن - چون غیر قابل برگشت هست ! بجاش میتونی یک الگوریتم خودت بنویسی و بعد فراخوانی کنی
مثلا برای رمزنگاری از تابع base64_encode و برای بازگشایی اون از base64_decode استفاده کنی ! البته توابع بهتر و قوی تری هم هستند !
موفق باشید !

siavashsay
سه شنبه 01 اسفند 1391, 13:21 عصر
میشه بحث رو بازتر کنیم؟؟؟

به نظر من راه بسیار خوبیه که جلوی sqlinjc گرفته بشه...
کلی تاپیک در این مورد توی فروم هست !
علاوه برای sqlinjection خیلی حملات رایج دیگه هم هستند از قبیل Session fixation | Session Injection | XSS | CSRF | RFI | LFI و ... !
نیازی به باز کردن موضوع نیست ! میتونید یه جستجوی کوچیک بزنید متوجه میشید !

vb_nima
سه شنبه 01 اسفند 1391, 20:03 عصر
کلی تاپیک در این مورد توی فروم هست !
علاوه برای sqlinjection خیلی حملات رایج دیگه هم هستند از قبیل Session fixation | Session Injection | XSS | CSRF | RFI | LFI و ... !
نیازی به باز کردن موضوع نیست ! میتونید یه جستجوی کوچیک بزنید متوجه میشید !

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

اگر چنین چیزی وجود داره بگید تا سرچ بزنم.
ممنون.

siavashsay
سه شنبه 01 اسفند 1391, 22:03 عصر
نه دوست عزیز ! اون حالتی که شما میفرمائید نمیشه !
مگه اینکه از برنامه نویسی شی گرا و یا functional استفاده کنید !
راههای جلوگیری برای هر نوع حمله فرق میکنه و شما نمیتونید مثلا یک فایل درست کنید و در همه صفحات ضمیمه کنید و امنیت برنامه رو تضمین کنید !
اینکار مثلا برای session fixation تا حدودی میشه !
مثلا یک صفحه کد مینویسید که آی پی کاربر رو در زمان ورود میگیره و اون رو در تمام صفحات چک میکنه که اگر آی پی در هر صفحه تغییر کرد کاربر رو به صفحه logout راهنمایی کنه و اون رو در همه صفحات ضمیمه میکنید !
حالا اگر هکر اومد و سشن کاربر رو سرقت کرد و خواست که با اون کار کنه دیگه نمیشه چون آی پی اون با کاربر واقعی فرق میکنه و صفحه logout میشه و دیگه هکر نمیتونه کاری کنه چون رمز عبور رو نداره !
البته این یه مثال خیلی کوچیک بود !
شما برای sql injection باید یک تابع تعریف کنید و هر موقع ورودی رو خواستید به دیتابیس بریزید - بگیرید و یا هر نوع تبادل اطلاعات با دیتابیس ... اون ورودی رو با اون تابع فیلتر کنید ...
خلاصه برای هر نوع حمله باید راه جداگانه به کار ببرید !
موفق باشید :)