PDA

View Full Version : حرفه ای: سایت امن و غیر قابل هک



reza10wert
سه شنبه 23 خرداد 1391, 16:54 عصر
برای ساختن یک سایت امن که به هیچ وجه هک نشه باید چه نکاتی در نظر گرفت ؟
در کجا باید دقت کنیم ؟
از چه دستورات و ترفندهایی استفاده کنیم ؟

در کل توضیح بفرمایید

M0TR!X
سه شنبه 23 خرداد 1391, 17:54 عصر
باید این فکر رو از ذهن بیرون کرد

MSN_Issue
سه شنبه 23 خرداد 1391, 17:56 عصر
باید برید هک یاد بگیرید...!
میتونید برای شروع یه سری به سایت آشیانه (http://ashiyane.org/forums/)بزنید...

reza10wert
سه شنبه 23 خرداد 1391, 18:43 عصر
در کل باید چه چیزهایی مدنظر بگیرم ؟
کجاها باید دقت بیشتری بکنم ؟

MSN_Issue
سه شنبه 23 خرداد 1391, 19:19 عصر
اگه میخواید واقعا سایتتون امن باشه که توی پست قبل گفتم !
اما اگه میخواید با کلیت مطلب آشنا بشید باید مواردی مثل موارد زیر رو رعایت کنید:
- هر جایی که میخواید یه کوئری به دیتابیس بزنید و لازمه یک قسمت از کوئری رو از کاربر بگیرید. مثل سرچ یا لاگین (SQL Injection)
- هر چایی که قراره یک تکست باکس رو کاربر پر کنه، مثل ارسال مطلب (XSS) (یک مقدار با مورد قبلی تداخل داره!!)
- امنیت پنل لاگین ادمین
- ...

reza10wert
سه شنبه 23 خرداد 1391, 19:21 عصر
خوب مثلا سایت های فروش کارت شارژ که میگن هک شده و تمام کارت ها لو رفته دلیلش چی بوده ؟

as13851365
سه شنبه 23 خرداد 1391, 19:25 عصر
تا زمانی که ندونید چطوری سایت هک می شه هیچ کاری نمی تونید بکنید اول باید ببینید چطوری سایت هک می شه تزریق کد چی هستش و ....

یه سوال کلی پرسیدی که جوابش یاد گرفتن مقدمات هک و حمله به سایت هستش

در حالت کلی باید ورودی ها رو بررسی کنی جایی که عدد می گیری باید عدد وارد بشه ( صفحه بندی و ... )
جاهایی که رشته دریافت می کنی رشته ها رو فیـــلتر کنی ( آدرس صفحه ها و ...)

در ضمن نمی خواد بری کلا بشینی هک کردن رو بخونی فقط یه صورت گذری یه نیگاه بنداز ببین چطوری یه سایت هک می شه تزیق کد sql و XSS و ...

saadatieathar
سه شنبه 23 خرداد 1391, 19:30 عصر
پیشنهاد من اینه که با کسایی که در زمینه تامین امنیت تخصص دارند حرف بزنید.
اگر از سیستم های برنامه نویسی شده (مثل همین سیستم های فروشگاهی) استفاده می کنید از سیستمی استفاده کنید که باگ نداشته باشه،یا اینکه متد رمزگذاری قویه داشته باشه تا وقتی به سایت نفوذ شذه اطلاعات به راحتی رمز گشایی نشه.
البته این رو هم در نظر بگیرید که وقتی کسی به سایتی نفوذ می کنه این به این معنا نیست که امنیت سایت شما کمه،ممکنه به سرور نفوذ شده باشه،ببینید وقتی شما هاست تهیه می کنید روی سروروی که سایت شما قرار داره مطمئنا ده ها سایت دیگه ای هم هست (که ممکنه باگ داشته باشند) پس بهتره از شرکت معتبری هاست تهیه کنید.

MMSHFE
سه شنبه 23 خرداد 1391, 19:55 عصر
یکی از مهمترین و رایجترین دلایلش همین رعایت نکردن اصول مقابله با Injection (اعم از JS یا SQL) هست. مثلاً با امتحان کردن Queryهای مختلف تمام اطلاعات جدول رو بیرون کشیدن درحالی که اگه ورودیهای کاربر Escape بشه جلوی چنین حملاتی گرفته میشه.

reza10wert
سه شنبه 23 خرداد 1391, 20:28 عصر
میشه نمونه کدی نشون بدید که درست متوجه بشم ؟

MMSHFE
سه شنبه 23 خرداد 1391, 20:41 عصر
مثلاً فرض کنید شما توی سایتتون سیستم پرداخت آنلاین گذاشتین و طوری برنامه نویسی کردین که وقتی پرداخت کرد، یک لینک براش ایمیل بشه و وقتی روی اون لینک کلیک میکنه، به صفحه ای توی سایت شما هدایت بشه که اونجا بتونه کد شارژ رو ببینه. کد لینک هم شبیه اینه:

<a href="http://www.yoursite.com/display_charge.php?user_code=adqwr4763sdKLq3rfsfA3 234d2qd50Rq">Display Charge Code</a>خوب تا اینجا که مشکلی نیست. توی اون صفحه هم فرض میکنیم چنین کدی نوشتین:

mysql_query("SELECT * FROM `charges` WHERE (`security_code`='{$_GET['user_code']}') LIMIT 1");
خیالتون هم راحته که LIMIT 1 گذاشتین و بیشتر از 1 کد دیده نمیشه و همه چیز به خوبی و خوشی تمام میشه اما یک هکر که یکم به کارش وارد باشه، میاد آدرس مقصد لینک رو کپی میکنه و توی مرورگر مینویسه و اینطوری تغییرش میده:

http://www.yoursite.com/display_charge.php?user_code=adqwr4763sdKLq3rfsfA3 234d2qd50Rq' OR 1=1;--
چه اتفاقی میفته؟ کوئری شما به این شکل در میاد:
mysql_query("SELECT * FROM `charges` WHERE (`security_code`='http://www.yoursite.com/display_charge.php?user_code=adqwr4763sdKLq3rfsfA3 234d2qd50Rq' OR 1=1;--') LIMIT 1");
نتیجه: نمایش تمام رکوردها !!!
(توضیح: وجود ' باعث میشه فقط تا Rq... جزو مقداری که باید با فیلد security_code مقایسه بشه، درنظر گرفته بشه و OR 1=1 هم یک شرط هست که همیش برقراره و ترکیبش بصورت «یا» با شرط قبلی، همیشه true هست. پس عملاً شرط WHERE رو باید بیخیال بشیم و همه رکوردها برگردونده میشه. حالا برای اینکه خطایی توی اجرای کوئری پیش نیاد، حضور ; باعث میشه کوئری همینجا تمام بشه و -- هم بقیه کوئری شما رو به کامنت (توضیحات بی اثر) تبدیل میکنه).
حالا اگه ورودی کاربر رو escape کنیم چطور میشه؟ یعنی کدمون اینطوری باشه:


$code = mysql_real_escape_string($_GET['user_code']);
mysql_query("SELECT * FROM `charges` WHERE (`security_code`='$code') LIMIT 1");

خوب حالا کدی که کاربر/هکر نوشته باعث میشه دستور ما این شکلی بشه:
mysql_query("SELECT * FROM `charges` WHERE (`security_code`='http://www.yoursite.com/display_charge.php?user_code=adqwr4763sdKLq3rfsfA3 234d2qd50Rq\' OR 1=1;--') LIMIT 1");
میبینید که فقط یک ' به '\ تبدیل شده اما همین تبدیل ساده باعث میشه که تا انتهای عبارتی که کاربر وارد کرده (یعنی تا --;) جزو عبارت مورد مقایسه قرار بگیره و دیگه کار قبلی خودش رو انجام نمیده (OR و ; و -- الآن جزو رشته هستن نه دستورات عملیاتی SQL).
موفق باشید.

reza10wert
سه شنبه 23 خرداد 1391, 20:45 عصر
ممنون
خیلی قشنگ توضیح دادید
برای حل همین مشکل مثلا باید چکار کرد ؟

MMSHFE
سه شنبه 23 خرداد 1391, 20:48 عصر
توضیحات رو تکمیل کردم و روش مقابله رو هم گفتم.

ravand
سه شنبه 23 خرداد 1391, 22:29 عصر
چند نمونه از توابع و دستوراتي كه براي امنيت سايت بكار ميره:

<?php
$str = "علي";
echo htmlentities($str, ENT_QUOTES, "UTF-8");
echo "<br>";
echo htmlentities($str);
?>



<?php
$ha='<script> alert(hi);</script>';
echo htmlentities($ha);
echo "<br>";
echo strip_tags($ha);
?>


if((!isset($_GET["id"])) or ($_GET["id"]=="") or (!is_numeric($_GET["id"]))){
header("Location:HTTP/1.0 404 Not Found");
exit;
}



<?php
$str = "test'?";
echo addslashes($str);
?>
out: test\'?



<?php
$karakter = "'";
$test = mysql_escape_string($karakter);
echo $test;
?>
out : \'




<?php
$kar="/ '";
echo get_magic_quotes_gpc($kar);
?>

soroush.r70
چهارشنبه 24 خرداد 1391, 15:58 عصر
در مورد امنیت لینک های دانلود هم بگین.

soroush.r70
پنج شنبه 25 خرداد 1391, 14:00 عصر
در مورد امنیت لینک های دانلود چیزی نمی دونید...؟

ameri110
پنج شنبه 25 خرداد 1391, 14:13 عصر
شما برای بررسی آسیبپذیری سایتتون باید از accunetix اسکنر استفاده کنید
همچنین موقع استفاده از کوکی ها و تابع اینکلود و ارتباط با دیتا بیس دقت کنید
چون اکثر سایت ها از این طرق هک میشن
یه نکته مهم دیگه اینه که برای انمیوس اف تی پی پسورد بزاری
من حداقل 600 تا سایت با این آسیب پذیزی ها هک کردم

soroush.r70
پنج شنبه 25 خرداد 1391, 15:07 عصر
در مورد امنیت لینک های دانلود چیزی نمی دونید...؟