PDA

View Full Version : سوال: این هکر چجوری به سایتم نفوذ پیدا کرده؟



saeed-71
جمعه 05 مهر 1392, 11:59 صبح
سلام.
سایت من ثبت نامش پیامکی هستش.کپچا هم داره.هر چی هم میتونستم رو امنیتش کار کردم.این دفعه دومه که به سایتم حمله یشه.
دفعه قبل تزریق کد جاواسکریپت و ... بود.
اونا رو بستمو کلی رو امنیتش کار کردم.
اما اینبار این کدا تزریق شده بدون به دیتابیس!
http://some-inexistent-website
../../../../../../../../../../
&cat /etc/passwd
SomeCustomInjectedHeader:in
print(md5(acunetix_wvs_securit
چجوری اینا تزریق شدن؟
تا زمانی که فرد ثبت نام نکنه نمیتونه این کار ها رو انجام بده.ولی اون بدون ثبت نام اینا رو تزریق کرده!

فرزند کوروش
جمعه 05 مهر 1392, 14:14 عصر
فکر میکنم یه نفر با نرم افزار acunetix_ سایتتو تست کرده که باگ از توش دربیاره

saeed-71
جمعه 05 مهر 1392, 16:04 عصر
اره چون تعداد سطرایی که اضاف کرده بود خیلی زیاد بود!

ولی اخه اون قسمت که میاد اگهی ثبت میکنه باید حتما ثبت نام کرد.بعد از ورود شمارت ثبت میشه و موقع ثبت آگهی هم شمارت هستش.اما مال این شمارش ثبت نشده بود!
یعنی بدون ورود اومده بود کد تزریق کرده بود!

lordofphp
جمعه 05 مهر 1392, 16:19 عصر
سلام
اینکه میگید بدون ورود ! مطمئنید حق دسترسی رو اعمال کردین؟
ضمنا شما قبل اینکه یه وب سایت رو آپ کنید باید با نرم افزار هایی مث اکونتکس چک کنید

saeed-71
جمعه 05 مهر 1392, 16:53 عصر
سلام
اینکه میگید بدون ورود ! مطمئنید حق دسترسی رو اعمال کردین؟
ضمنا شما قبل اینکه یه وب سایت رو آپ کنید باید با نرم افزار هایی مث اکونتکس چک کنید

اره بابا.بدون ورود نمیشه به اون قسمت دسترسی داشت.من با سشن این کار رو میکنم.تا اون سشن تولید نشه و تو اون صفحه وجود نداشته باشه امکان دسترسی به اون صفحه امکان پذیر نیست!مطمئنم که با نرم افزار این ار رو کرده.چون ادم نمیتونه 5000 سطر وارد کنه پشت سر هم.الان واسه اون قسمتم کپچا گذاشتم که دیگه نرم افزار نتونه کد تزریق کنه پشت سر هم.

one hacker alone
جمعه 05 مهر 1392, 17:42 عصر
کد نویسیتون ضعیف بوده که تونسته بدونه ثبت نام ارسال اطلاعات کنه
نکته ی دیگه اینکه سایت شما هک شده یا صرفا مشکلتون با درخواست هایی لوگ شده هست
اگه هک شده که میشه مسیر هک شدن و نوع مشکل رو مشخص کرد
اگه اطلاعات ارسالی براتون تازگی داره که به قول دوستان صرفا اومدن تست کردن چیز خاصی نیست

saeed-71
جمعه 05 مهر 1392, 18:11 عصر
کد نویسیتون ضعیف بوده که تونسته بدونه ثبت نام ارسال اطلاعات کنه
نکته ی دیگه اینکه سایت شما هک شده یا صرفا مشکلتون با درخواست هایی لوگ شده هست
اگه هک شده که میشه مسیر هک شدن و نوع مشکل رو مشخص کرد
اگه اطلاعات ارسالی براتون تازگی داره که به قول دوستان صرفا اومدن تست کردن چیز خاصی نیست
اقا من رفتم تو دیتابیسو چک کنم دیدم کلی سطر تو جدول ثبت آگهی به وجود اومده!

وقتی کسی وارد سایت میشه با شماره موبایلش وارد میشه.بعد از این که وارد شد شمار موایلش تو یه سشن ریخته میشه.بعد هر موقع که خواست آگهی ثبت کنه شماره موبایلشم همراه اگهی ثبت میشه!
مشکل اینجاست که هیچ شماره موبایلی همراه اگهی ثبت نشده بود!

shahriyar3
جمعه 05 مهر 1392, 18:26 عصر
فرضا هکر تونسته یک سشن جعلی مشابه اسمی که شما ایجاد میکنید ایجاد کنه
شما اول هر صفحه که میخواین محتوای اون سشن و با محتوایی که باید توی دیتا بیس باشه تظبیق میدین؟ (حدس میزنم که نه!)
محتوای سشن باید کریپت شده باشه حتما برای شما اینطور نبوده
خوب حالا هکر تونسته با سشن هم نام ولی محتوای جعلی وارد سایت بشه حالا برای کوئری ها لاگ در نظر گرفتی که اگر ارور داد اجرای برنامه رو متوقف کنه و لاگ ارور و به شما نشون بده؟(اینم حدس میزنم که ندارین!)
با فرض اینکه هکر بتونه توی هر صفحه سشن و hijack کنه من همیشه سشن ها رو validate میکنم بعد محتوی سشن با مقدار توی دیتا بیس مقایسه میکنم.

saeed-71
جمعه 05 مهر 1392, 18:52 عصر
شما اول هر صفحه که میخواین محتوای اون سشن و با محتوایی که باید توی دیتا بیس باشه تظبیق میدین؟ (حدس میزنم که نه!) << اره این کار رو کردم
محتوای سشن باید کریپت شده باشه حتما برای شما اینطور نبوده << نیمدونم اینی که میگید یعنی چی!
خوب حالا هکر تونسته با سشن هم نام ولی محتوای جعلی وارد سایت بشه حالا برای کوئری ها لاگ در نظر گرفتی که اگر ارور داد اجرای برنامه رو متوقف کنه و لاگ ارور و به شما نشون بده؟(اینم حدس میزنم که ندارین!)>> یعنی بگم اگه شماره موبایلی وجود نداشت هیچ آگهی ثبت نشه؟
با فرض اینکه هکر بتونه توی هر صفحه سشن و hijack کنه من همیشه سشن ها رو validate میکنم بعد محتوی سشن با مقدار توی دیتا بیس مقایسه میکنم.>>سشن رو هم validate میکنم.

shahriyar3
جمعه 05 مهر 1392, 19:26 عصر
اصلا من بعید میدونم با این روش هک شده باشین
فکر کنم sql injection شدین شما
پارامتر هائی که میزارین تو کوئری و validate میکنید یا نه؟

saeed-71
جمعه 05 مهر 1392, 19:29 عصر
اصلا من بعید میدونم با این روش هک شده باشین
فکر کنم sql injection شدین شما
پارامتر هائی که میزارین تو کوئری و validate میکنید یا نه؟
اره بابا.تازه کدای جاوا اسکریپتی که تزریق کرده بودم بعد از عبور از فیلتر خنثی شده بودن!

shahriyar3
جمعه 05 مهر 1392, 19:39 عصر
اره بابا.تازه کدای جاوا اسکریپتی که تزریق کرده بودم بعد از عبور از فیلتر خنثی شده بودن!
sql injection گفتم نه جاوا اسکریپت!!

MMSHFE
جمعه 05 مهر 1392, 23:32 عصر
مشکل شما میتونه ریشه های مختلفی داشته باشه. یکیش Session Hijacking هست. یکی دیگه، همونطور که دوستان اشاره کردن، SQL Injection هست که باید دقت کنید با Javascript Injection اشتباه گرفته نشه. یک راه دیگه، هک سرور شما و آپلود Shell هست (مطمئنید هاستتون امنه؟). حتی ممکنه اگه هاست درست Config نشده باشه، با خرید یک اکانت روی همون هاست و بدون نیاز به هک کردن خود سرور، به راحتی محتویات پوشه ای که بعنوان محل ذخیره سازی Session ازش استفاده شده رو خوند و فایلهای Session بقیه سایتهای روی اون هاست رو بدست آورد. اینجاست که میگن باید محتوای Session رو رمزگذاری (Crypt) کنید تا اگه بدست کسی افتاد، به دردش نخوره. یا مثلاً برای جلوگیری از Session Hijacking در فواصل زمانی مشخص یا حتی در هربار بازدید از سایت، با کمک تابع session_regenerate_id اقدام به تغییر Session ID کنید تا اگه احیاناً کسی سشن رو جعل کرده باشه، از کار بیفته. CAPTCHA هم که بعنوان راه حل اساسی در اینجور وقتها درنظر گرفته میشه، وقتی بدرد میخوره که سایتتون درمقابل SQL Injection آسیب پذیر نباشه یا Shell روی سایتتون آپلود نشده باشه وگرنه مستقیماً میشه کوئری اجرا کرد و کلاً فرم رو نادیده گرفت. بعلاوه سایت شما باید در مواقعی که اینجور درخواستهای انبوه میاد، شما رو با ایمیل مطلع کنه و IP کسی رو که داره کوئری بصورت انبوه اجرا میکنه (یا چندبار CAPTCHA رو اشتباه وارد کرده) بلاک کنه. بطور کلی جدا از بحث امنیت خود هاست، میشه گفت درمورد امنیت سایتتون متأسفانه زیاد هم حرفه ای عمل نکردین که البته اشکالی نداره و کم کم تجربه تون تو این مسائل زیاد میشه. فقط مراقب باشین از یک سوراخ، دوبار گزیده نشین.

saeed-71
شنبه 06 مهر 1392, 07:58 صبح
مشکل شما میتونه ریشه های مختلفی داشته باشه. یکیش Session Hijacking هست. یکی دیگه، همونطور که دوستان اشاره کردن، SQL Injection هست که باید دقت کنید با Javascript Injection اشتباه گرفته نشه. یک راه دیگه، هک سرور شما و آپلود Shell هست (مطمئنید هاستتون امنه؟). حتی ممکنه اگه هاست درست Config نشده باشه، با خرید یک اکانت روی همون هاست و بدون نیاز به هک کردن خود سرور، به راحتی محتویات پوشه ای که بعنوان محل ذخیره سازی Session ازش استفاده شده رو خوند و فایلهای Session بقیه سایتهای روی اون هاست رو بدست آورد. اینجاست که میگن باید محتوای Session رو رمزگذاری (Crypt) کنید تا اگه بدست کسی افتاد، به دردش نخوره. یا مثلاً برای جلوگیری از Session Hijacking در فواصل زمانی مشخص یا حتی در هربار بازدید از سایت، با کمک تابع session_regenerate_id اقدام به تغییر Session ID کنید تا اگه احیاناً کسی سشن رو جعل کرده باشه، از کار بیفته. CAPTCHA هم که بعنوان راه حل اساسی در اینجور وقتها درنظر گرفته میشه، وقتی بدرد میخوره که سایتتون درمقابل SQL Injection آسیب پذیر نباشه یا Shell روی سایتتون آپلود نشده باشه وگرنه مستقیماً میشه کوئری اجرا کرد و کلاً فرم رو نادیده گرفت. بعلاوه سایت شما باید در مواقعی که اینجور درخواستهای انبوه میاد، شما رو با ایمیل مطلع کنه و IP کسی رو که داره کوئری بصورت انبوه اجرا میکنه (یا چندبار CAPTCHA رو اشتباه وارد کرده) بلاک کنه. بطور کلی جدا از بحث امنیت خود هاست، میشه گفت درمورد امنیت سایتتون متأسفانه زیاد هم حرفه ای عمل نکردین که البته اشکالی نداره و کم کم تجربه تون تو این مسائل زیاد میشه. فقط مراقب باشین از یک سوراخ، دوبار گزیده نشین.

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

eshpilen
شنبه 06 مهر 1392, 09:10 صبح
بفرمایید اینم از اون نمونه برنامه نویسهای نوجوان که به روش تجربی و فشرده اقدام به یادگیری و بلافاصله یا همزمان شروع به برنامه نویسی تجاری کرده اند!
آقا جون من شما چقدر تئوری خوندی چقدر در امنیت چیز خوندی و فهمیدی؟
کلا چند وقته برنامه نویسی رو یاد گرفتی؟ چندتا کتاب خوندی؟ از توی همین فرومها یاد گرفتی؟
چه تحصیلات مرتبطی چه تخصص قبلی داشتی؟

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

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

saeed-71
شنبه 06 مهر 1392, 10:04 صبح
بفرمایید اینم از اون نمونه برنامه نویسهای نوجوان که به روش تجربی و فشرده اقدام به یادگیری و بلافاصله یا همزمان شروع به برنامه نویسی تجاری کرده اند!
آقا جون من شما چقدر تئوری خوندی چقدر در امنیت چیز خوندی و فهمیدی؟
کلا چند وقته برنامه نویسی رو یاد گرفتی؟ چندتا کتاب خوندی؟ از توی همین فرومها یاد گرفتی؟
چه تحصیلات مرتبطی چه تخصص قبلی داشتی؟

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

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

eshpilen
شنبه 06 مهر 1392, 10:54 صبح
خوبه پس حداقل جرمی مرتکب نشدی کسی نمیتونه ازت شاکی باشه.
ولی بازم دیدگاه خودت رو در زمینهء برنامه نویسی و طرز یادگیریش بهتره درست کنی.
چون اینطور که معلومه زیاد ساده گرفتی. البته این تفکری هست که خیلی ها دارن، حتی اونایی که سالها تجربه و کار تجاری هم دارن. خیلی ها هستن میگن برنامه نویسی بیشترش عملیه، و در حین کار کدنوشتن و تجربه میشه همش یا بیشترش رو یاد گرفت.
بنظر میاد غیرمنتظره بوده برات که سایتت هک شده و این خودش نشون میده که از واقعیت ناآگاه بودی و سطح واقعی خودت/کارت رو نمیدونی.
حالا جواب سوالهایی که مطرح کردم رو میتونی صادقانه بدی؟
سن خودتان را هم بفرمایید لطفا :لبخند:

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

saeed-71
یک شنبه 07 مهر 1392, 09:01 صبح
اقا این کد لایگن سایت من هستش.لطفا راهنمایی کنید کجاش مشکل داره که این هکره تونسته نفوذ کنه!



<?php
ob_start();
session_start();
include('../funcs/config.php');
include_once('jdf.php');
mysql_query("set names utf8");
if(isset($_POST['submit']))
{

if(strcmp($_POST['captcha'],$_SESSION['captcha'])!=0)
{
$_SESSION['cap']="کد امنیتی وارد شده اشتباه میباشد.لطفا تصویر امنیتی را بررسی نمایید و مجددا کد را وارد کنید.";
header("location:../noregister.php");
}
else{
$mobile =mysql_real_escape_string($_POST["mobile"]);
$mobile=filter_var($mobile, FILTER_SANITIZE_NUMBER_INT);
if(!preg_match('/^09[123]\d{8}$/', $_POST['mobile']))
{
$_SESSION['cap']="شماره موبایل وارد شده صحیح نمیباشد.";
header("location:../noregister.php");
}
else{

$mobile =mysql_real_escape_string($_POST["mobile"]);
$mobile=filter_var($mobile, FILTER_SANITIZE_NUMBER_INT);
$pas = $_POST['ramz'];
$pas=filter_var($pas, FILTER_SANITIZE_STRING);
$ramz=Sha1($pas);
$ramz=md5($pas);
$result=mysql_query("select * from user where mobile='$mobile' AND ramz='$ramz'");
if(mysql_num_rows($result)>0)
{
$_SESSION['mobile']=mysql_real_escape_string($_POST["mobile"]);
$_SESSION['login']=true;
header("location:allad.php");
}
else{
$_SESSION['cap']="نام کاربری یا کلمه عبور وارد شده اشتباه میباشد.لطفا کلمه عبور و نام کاربری صحیح را وارد کنید.";
header("location:../noregister.php");
}
}
}

}

?>

colors
یک شنبه 07 مهر 1392, 09:37 صبح
اقا این کد لایگن سایت من هستش.لطفا راهنمایی کنید کجاش مشکل داره که این هکره تونسته نفوذ کنه!



<?php
ob_start();
session_start();
include('../funcs/config.php');
include_once('jdf.php');
mysql_query("set names utf8");
if(isset($_POST['submit']))
{

if(strcmp($_POST['captcha'],$_SESSION['captcha'])!=0)
{
$_SESSION['cap']="کد امنیتی وارد شده اشتباه میباشد.لطفا تصویر امنیتی را بررسی نمایید و مجددا کد را وارد کنید.";
header("location:../noregister.php");
}
else{
$mobile =mysql_real_escape_string($_POST["mobile"]);
$mobile=filter_var($mobile, FILTER_SANITIZE_NUMBER_INT);
if(!preg_match('/^09[123]\d{8}$/', $_POST['mobile']))
{
$_SESSION['cap']="شماره موبایل وارد شده صحیح نمیباشد.";
header("location:../noregister.php");
}
else{

$mobile =mysql_real_escape_string($_POST["mobile"]);
$mobile=filter_var($mobile, FILTER_SANITIZE_NUMBER_INT);
$pas = $_POST['ramz'];
$pas=filter_var($pas, FILTER_SANITIZE_STRING);
$ramz=Sha1($pas);
$ramz=md5($pas);
$result=mysql_query("select * from user where mobile='$mobile' AND ramz='$ramz'");
if(mysql_num_rows($result)>0)
{
$_SESSION['mobile']=mysql_real_escape_string($_POST["mobile"]);
$_SESSION['login']=true;
header("location:allad.php");
}
else{
$_SESSION['cap']="نام کاربری یا کلمه عبور وارد شده اشتباه میباشد.لطفا کلمه عبور و نام کاربری صحیح را وارد کنید.";
header("location:../noregister.php");
}
}
}

}

?>



الان مثلا سشن هاتو کریپت کردی؟
بی ادبی نباشه ولی در کل خیلی مبتدی یانه نوشته شده!
مثلا اسکیپ داده ها, چک کردن داده های ارسالی, توابع هش و ...
شک نکنید اگه صفحه لاگینتون اینه, پس کل سایتتون پر از باگه! توصیه میکنم یه سری به تاپیک های جناب eshpilen بزنید. در مورد همه چی به خوبی و همرا ه با مثال براتون توضیح داده.

saeed-71
یک شنبه 07 مهر 1392, 12:41 عصر
خوب منم نگفتم حرفه ایم که.
یه سایت واسه خودم ازمایشی زدم.خواستم یاد بگیرم.اینم اینجا گذاشتم که اصلاحش کنم نه اینکه ...

colors
یک شنبه 07 مهر 1392, 12:46 عصر
خوب منم نگفتم حرفه ایم که.
یه سایت واسه خودم ازمایشی زدم.خواستم یاد بگیرم.اینم اینجا گذاشتم که اصلاحش کنم نه اینکه ...

دوست عزیز من که چیزی نگفتم!
لطفا اون توصیه بالارو جدی بگیر, حداقل تاپیکهاش با امنیت آشنات میکنه و تاثیر زیادی داره

saeed-71
یک شنبه 07 مهر 1392, 15:56 عصر
چشم.اما خوب حداقل بگید این کد کجاش مشکل داره؟کجاشو اصلاح کنم؟چی اضف کنم؟چی کم کنم؟باورد کنید خیلی نیاز دارم به اصلاحش.الان سایتم رو هواست.هر لحظه امکان داره دوباره بیان هکش کنن.

shahriyar3
یک شنبه 07 مهر 1392, 16:14 عصر
آقا پسورد و از کی تا حالا فیلتر میکنن؟!!! پسورد طرف و میزنی عوض میکنی که!!


$pas=filter_var($pas, FILTER_SANITIZE_STRING);

پسورد و توی کوئری چک نکن . از کوئری نتیجه ها رو بکش بیرون بعد مقایسه کن
شرط تعداد نتایج کوئری رو هم بزرگتر از 0 نزار مساوی 1 بزار.

saeed-71
یک شنبه 07 مهر 1392, 16:26 عصر
پسورد رو رندم تولید میکنم و میفرستم برا طرف.اون رمزو تعیین نمیکنه.

این سشن رو چجوری امنش کنم؟چه تغییری توش بدم؟

colors
یک شنبه 07 مهر 1392, 16:57 عصر
چشم.اما خوب حداقل بگید این کد کجاش مشکل داره؟کجاشو اصلاح کنم؟چی اضف کنم؟چی کم کنم؟باورد کنید خیلی نیاز دارم به اصلاحش.الان سایتم رو هواست.هر لحظه امکان داره دوباره بیان هکش کنن.


چشمت بی بلا.

1 : بهتره وقتی فایلی دیگه رو اینکلود میکنید به اهمیت و جایگاه فایل توجه کنید که وظیفه ش چیه. فایل config.php که اینکلود کردین ظاهرا تنظیمات پروژه هست که حتما نیازه وجود داشته باشه و بدون این برنامه اجرا نمیشه, پس بهتره از require استفاده کنید که در صورتی که فایل config.php به هر دلیلی نتونه اجرا بشه این تابع پروژه رو متوقف کنه و به خطهای بعدی نره که ممکنه مشکلات امنیتی و ... به وجود بیاره. همچینی بهتره از once_ش استفاده کنید که با توجه به اینکه این فایل تنظیمات تقریبا تو تمام صفحات ضمیمه میشه, خدای نکرده تو دوتا صفحه که تو همدیگه اجرا میشن ایجاد خطا نکنه.
یعنی در نهایت بهتره از require_once استفاده بشه.( مثلا همین jdf.php که یه کلاس خوب برای کار با تاریخ و اینها هستش, زیاد مهم نیست که حتما اجرا بشه. حداقل اونقد مهم نیست که بخوای با خطای که ایجاد میکنه سایت رو ببندی! )

2 : بهتره هنگام چک کردن مقادیر ارسالی برای اجرای شرط ها فقط به isset اکتفا نشه که فقط چک میکنه متغیر وجود داره یا نه و در کناش چک کنید ببینید آیا مقداری هم داره یا نه که همون تابع empty اکتفا میکنه.

3 : بهتره داده های رو که نیاز به اسکیپ دارن رو همینجوری با تابع mysql_real_escape_string نزنی اسکیپ کنی. بحث magic quotes که پیش بیاد دیگه خطرناک میشه. بهتره برای اسکیپ از تابع زیر استفاده بشه که مورد تایید اساتید این انجمن هم هست.


function EscapeString($value)
{
if(!is_numeric($value)) {
if(get_magic_quotes_gpc()) $value = stripslashes($value);
return mysql_real_escape_string($value);
}
else{
return $value;
}
}


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


<?php
ob_start();
session_start();
require_once('../funcs/config.php');
include_once('jdf.php');

# ٍEscape Function
function EscapeString($value)
{
if(!is_numeric($value)) {
if(get_magic_quotes_gpc()) $value = stripslashes($value);
return mysql_real_escape_string($value);
}
else{
return $value;
}
}

mysql_query("set names utf8");
if( isset($_POST['submit']) && !empty($_POST['submit']) )
{
if( strcmp($_POST['captcha'],$_SESSION['captcha'])!=0 )
{
$_SESSION['cap']="کد امنیتی وارد شده اشتباه میباشد.لطفا تصویر امنیتی را بررسی نمایید و مجددا کد را وارد کنید.";
header("location:../noregister.php");
}
else{
$mobile = EscapeString($_POST["mobile"]);
$mobile = filter_var($mobile, FILTER_SANITIZE_NUMBER_INT);
if(!preg_match('/^09[123]\d{8}$/', $_POST['mobile']))
{
$_SESSION['cap']="شماره موبایل وارد شده صحیح نمیباشد.";
header("location:../noregister.php");
}
else{
$mobile = EscapeString($_POST["mobile"]);
$mobile = filter_var($mobile, FILTER_SANITIZE_NUMBER_INT);
$pas = $_POST['ramz'];
$pas = filter_var($pas, FILTER_SANITIZE_STRING);
$ramz = Sha1($pas);
$ramz = md5($pas);
$result = mysql_query("select * from user where mobile='$mobile' AND ramz='$ramz'");
if(mysql_num_rows($result)== 1)
{
$_SESSION['mobile'] = EscapeString($_POST["mobile"]);
$_SESSION['login'] = true;
header("location:allad.php");
}
else{
$_SESSION['cap']="نام کاربری یا کلمه عبور وارد شده اشتباه میباشد.لطفا کلمه عبور و نام کاربری صحیح را وارد کنید.";
header("location:../noregister.php");
}
}
}
}

راستی به ظاهر کدهاتون توجه کنید! (اهمیت رعایت نکات کدنویسی (http://samanwds.ir/%D8%A7%D9%87%D9%85%DB%8C%D8%AA-%D8%B1%D8%B9%D8%A7%DB%8C%D8%AA-%D9%86%DA%A9%D8%A7%D8%AA-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C/))

saeed-71
یک شنبه 07 مهر 1392, 18:55 عصر
ممنون از لطفت اقای colors

فقط اون امنیت سشن چجوریه؟باید چه تغییراتی توش داد؟

colors
یک شنبه 07 مهر 1392, 21:04 عصر
ممنون از لطفت اقای colors

فقط اون امنیت سشن چجوریه؟باید چه تغییراتی توش داد؟

خواهش میکنم.
سشن رو تو دیتابیس ذخیره کنید و دادهای رو که تو سشن میزارید به صورت خام نباشه. مثلا مقادیرشو هش کنید.

saeed-71
یک شنبه 07 مهر 1392, 21:22 عصر
یعنی یه جدول واسه سشن ها تو دیتابیس ایجاد کنمو سشن ها رو ذخیره کنم؟
جدولو جداگونه ایجاد کنم بهتره یا اینکه کنار همون یوزر پسوردا ذخیرش کنم؟

colors
یک شنبه 07 مهر 1392, 22:25 عصر
یعنی یه جدول واسه سشن ها تو دیتابیس ایجاد کنمو سشن ها رو ذخیره کنم؟
جدولو جداگونه ایجاد کنم بهتره یا اینکه کنار همون یوزر پسوردا ذخیرش کنم؟

نه دوست عزیز, اینجا (http://barnamenevis.org/showthread.php?286634-%D8%B0%D8%AE%D9%8A%D8%B1%D9%87-Session-%D8%AF%D8%B1-DB-%D8%A8%D9%87-%D8%AC%D8%A7%D9%8A-%D9%81%D8%A7%D9%8A%D9%84) رو مطاله کنید.(ذخیره سشن در دیتابیس)

arta.nasiri
یک شنبه 07 مهر 1392, 23:56 عصر
سلام

دوست عزیز من یجای کدتون رو متوجه نشدم!!!!


$ramz = Sha1($pas);
$ramz = md5($pas);

این 2 خط چیکار میکنه؟

اگه میخواین هش کنید بهتر نیس اینجوری باشه؟


$ramz = Sha1($pas);
$ramz = md5($ramz5);


در مورد کوئری هایی هم که اجرا میکنید بهتره از SP استفاده بشه به نظرم.

کلا روش authentication شما درست نیست. بهتره یکم اطلاعتتون رو آپدیت کنید.

sadegh33
دوشنبه 08 مهر 1392, 01:18 صبح
خوب چ کاریه مینونی این ها رو تو یک خط هم بنویسی


$ramz = Sha1(md5($pas));

eshpilen
دوشنبه 08 مهر 1392, 07:47 صبح
نه خوشم اومد، مبتدی با ظرفیتی هستی و میخوای یاد بگیری :چشمک:

saeed-71
دوشنبه 08 مهر 1392, 16:00 عصر
مرسی از دوستان
اقا فک کنم این یکی هم باگ داره!
این مال اپلود تصویر هستش!
مشکل این چیه؟



$exp=strrchr($_FILES["img"]["name"], ".");
if ($exp==".jpg" or $exp==".JPG" or $exp==".png" or $exp==".png" or $exp==".gif" or $exp==".gif")
{
$random_digit=rand(00000000,99999999);
$new_file_name=$random_digit.$file_name;
$folder = "upload/".$new_file_name;
$target = $folder . $_FILES["img"]["name"];
move_uploaded_file($_FILES["img"]["tmp_name"], $target);
}

eshpilen
سه شنبه 09 مهر 1392, 07:33 صبح
من خیلی وقتی پیش درمورد امنیت آپلود یه تحقیقی کردم. امنیتش نکات متعدد مهمی داره و ایجاد امنیت 100% واقعا دشواره. ولی یکسری موارد مهمتر و درشت داره.
الان این کد شما هم بله بنظر میرسه مشکل و خطر داره.
یک مشکل و ریسک امنیتی اولوش اینه که این نام رو بعنوان معتبر میشناسه: test.php.jpg

<?php

error_reporting(E_ALL);
ini_set('display_errors', '1');

$name='test.php.jpg';

$exp=strrchr($name, ".");
if ($exp==".jpg" or $exp==".JPG" or $exp==".png" or $exp==".png" or $exp==".gif" or $exp==".gif")
{
echo 'ok';
}

?>


در این صورت، و اگر کانفیگ PHP هاست شما از نوع خاصی باشه، مردم میتونن روی هاست شما فایلهای PHP آپلود کنن که وقتی آدرس اونها رو در مرورگر وارد میکنن اجرا بشن.

white tower
سه شنبه 09 مهر 1392, 09:25 صبح
با عرض معذرت اشتباه اینجا پست دادم

saeed-71
سه شنبه 09 مهر 1392, 12:11 عصر
من خیلی وقتی پیش درمورد امنیت آپلود یه تحقیقی کردم. امنیتش نکات متعدد مهمی داره و ایجاد امنیت 100% واقعا دشواره. ولی یکسری موارد مهمتر و درشت داره.
الان این کد شما هم بله بنظر میرسه مشکل و خطر داره.
یک مشکل و ریسک امنیتی اولوش اینه که این نام رو بعنوان معتبر میشناسه: test.php.jpg

<?php

error_reporting(E_ALL);
ini_set('display_errors', '1');

$name='test.php.jpg';

$exp=strrchr($name, ".");
if ($exp==".jpg" or $exp==".JPG" or $exp==".png" or $exp==".png" or $exp==".gif" or $exp==".gif")
{
echo 'ok';
}

?>


در این صورت، و اگر کانفیگ PHP هاست شما از نوع خاصی باشه، مردم میتونن روی هاست شما فایلهای PHP آپلود کنن که وقتی آدرس اونها رو در مرورگر وارد میکنن اجرا بشن.

ممنون.اقا خوب راه حلشم بگید دیگه:ناراحت:

eshpilen
چهارشنبه 10 مهر 1392, 08:56 صبح
خب میتونی بجز نقطهء آخر در نام فایل، بقیه رو با کاراکتر دیگری جایگزین کنی، یا حتی حذف کنی. یا اصلا از یک اسم رندوم برای فایل استفاده کنی.
راههای مختلفی هست که هرجا و هرکس یکیش رو استفاده کرده.

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

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

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

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

saeed-71
چهارشنبه 10 مهر 1392, 11:44 صبح
اقا من سایتو اسکن کردم.بعد این ارور رو داد که برای ورود باید تابع exit(); هم استفاده کنم اخرش درسته؟



<?php if($_SESSION['login']!=true){
header("location:../noregister.php");
exit();
}

colors
چهارشنبه 10 مهر 1392, 12:48 عصر
اقا من سایتو اسکن کردم.بعد این ارور رو داد که برای ورود باید تابع exit(); هم استفاده کنم اخرش درسته؟



<?php if($_SESSION['login']!=true){
header("location:../noregister.php");
exit();
}


بله همیشه باید بعد از استفاده از تابع header برای انتقال کاربر به یه صفحه دیگه حتما از تابع exit() استفاده کنید

saeed-71
چهارشنبه 10 مهر 1392, 16:04 عصر
مرسی.اقا تو این فایل لاگین که کدشم هون بالا گذاشتم کجاش باید ایدی سشن به کار ببرم؟
session_regenerate_id();

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