PDA

View Full Version : مشکل امنیتی در php



Bahram0110
سه شنبه 02 مرداد 1386, 22:49 عصر
سلام
من ورودی های متنی را با تابع زیر چک می کنم و بعد از آنها استفاده می کنم



<?php
function secureit($inputstring)
{

$str = $inputstring;
$str = strtolower($str);

//replacing a single quote with a two single quotes -
//the way to escape single quotes in SQL.
$str = str_replace("'", "''", $str);

//script attack
$str = str_replace("<script", " ", $str);
$str = str_replace("<?", " ", $str);

//reject input that contains the following characters
$str = str_replace(";", " ", $str);
$str = str_replace("--", " ", $str);
$str = str_replace("/*", " ", $str);
$str = str_replace("*/", " ", $str);
$str = str_replace("*/", " ", $str);

//Note that if you are using a LIKE clause, wildcard
//characters still need to be escaped:
$str = str_replace("[", "[[]", $str);
$str = str_replace("%", "[%]", $str);
$str = str_replace("_", "[_]", $str);

//dang. words!
$str = str_replace("union", "_union", $str);
$str = str_replace("having", "_having", $str);
$str = str_replace("shutdown", "_shutdown", $str);
$str = str_replace("insert", "_insert", $str);
$str = str_replace("select", "_select", $str);
$str = str_replace("delete", "_delete", $str);
$str = str_replace("update", "_update", $str);
$str = str_replace("drop", "_drop", $str);
$str = str_replace("exec", "_exec", $str);
$str = str_replace("sp_", "_sp_", $str);
return $str;
}

?>


ولی مشکلم اینه که وقتی توی یه تکست باکس می نویسم :



<?php echo "string here"; ?>

کد اجرا می شه و "> به بیرون از تکست باکس می ره (عکس ضمیمه رو ببینید)
به نظر شما کد من (من نه دوستان) مشکلی داره؟ :متفکر:

oxygenws
سه شنبه 02 مرداد 1386, 23:44 عصر
عذر می خوام... ولی چه تابع مسخره ای :)
امن کردن داده در حالات مختلف متفاوته، دقیقا برای چه کاری لازم دارید؟؟

اگر فقط منظورت همین مثالی است که زدی و در همین مورد، شما از تابع htmlentities که توی خود PHP است استفاده بکن. (ضمن اینکه دیگه از این تابع قشنگ هم استفاده نکن :) )

Bahram0110
چهارشنبه 03 مرداد 1386, 00:08 صبح
عذر می خوام... ولی چه تابع مسخره ای :)
امن کردن داده در حالات مختلف متفاوته، دقیقا برای چه کاری لازم دارید؟؟

اگر فقط منظورت همین مثالی است که زدی و در همین مورد، شما از تابع htmlentities که توی خود PHP است استفاده بکن. (ضمن اینکه دیگه از این تابع قشنگ هم استفاده نکن :) )

والا این تابع رو تو همین برنامه نویس پیدا کردم !!
---
امن کردن مگه حد هم داره؟ :لبخند: می خوام جلو هکر ها کم نیارم :لبخند:

می شه یه تابع خوب معرفی کنید؟
من برای حالتی می خوام که کاربرا می خوان تو سایت ثبت نام کنن

دیگه هم از این تابع مسخره استفاده نمی کنم :لبخند:

oxygenws
چهارشنبه 03 مرداد 1386, 00:15 صبح
والا این تابع رو تو همین برنامه نویس پیدا کردم !
خوب؟؟ :دی خیلی چیزا اینجا هست، هم درست و هم نادرست! قدرت تشخیص رو بید شما داشته باشی.


امن کردن مگه حد هم داره؟ :لبخند: می خوام جلو هکر ها کم نیارم
بهتره برای اینکه جلوی اونها کم نیاری، اول هک کردن رو بدونی (ضمن اینکه کلا بهتره بگی کرک کردن!!!!)
حد هم داره. کرک نشدن مطلق نیست، نسبی است، پس حد و حدود داره. یک سیستم می تونه امن تر از یک سیستم دیگه باشه، اما هیچ سیستمی ۱۰۰٪ امن نیست.


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

امن کردن داده در حالات مختلف متفاوته، دقیقا برای چه کاری لازم دارید


من برای حالتی می خوام که کاربرا می خوان تو سایت ثبت نام کنن
جزیی تر بگو. مثالی که اینجا زدی ربطی به ثبت نام نداشت.
حداقل از دو تابع htmlentities و addslashes (یا توابع مشابه) می تونی استفاده کنی.


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

Bahram0110
چهارشنبه 03 مرداد 1386, 00:40 صبح
این کافیه به نظر شما؟



$name = @strip_tags($_POST['name']);
$name = @stripslashes($name);

$pass = @strip_tags($_POST['pass']);
$pass = @stripslashes($pass);

hidensoft
چهارشنبه 03 مرداد 1386, 08:39 صبح
در مورد اون سوال اولت باید بهت بگم که اشتباه شما در HTML هست. چیزی که عکس نشون می دی هیچ ربطی به کد PHP که شما گذاشتید نداره !

Bahram0110
چهارشنبه 03 مرداد 1386, 10:18 صبح
نظرتون درباره stripslashes و strip_tags چیه؟
می تونی جلوی اسکریپت ها و حملات رو بگیره؟

oxygenws
چهارشنبه 03 مرداد 1386, 10:22 صبح
stripslashes جاش اینجا نیست. راهنمای PHP رو دقیق بخون.

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


در نهایت در مواردی به این مهمی (امنیتی) چرا از @ استفاده می کنی؟!!

cybercoder
چهارشنبه 03 مرداد 1386, 17:35 عصر
به نظر من استفاده بیش از حد روش های امنیتی بیشتر به توهم از توطئه خود آدم بر می گرده چون روش های امنیتی استاندارد شده و به صورت Universal وجود داره که امنیت رو به درصد بالایی می رسونه.

موفق باشید.

Bahram0110
چهارشنبه 03 مرداد 1386, 19:17 عصر
به نظر من استفاده بیش از حد روش های امنیتی بیشتر به توهم از توطئه خود آدم بر می گرده چون روش های امنیتی استاندارد شده و به صورت Universal وجود داره که امنیت رو به درصد بالایی می رسونه.

موفق باشید.

سلام
شما دربارهء استاندارد های این موضوع اطلاعی دارین؟
ممنون می شم راهنمایی کنید

cybercoder
جمعه 05 مرداد 1386, 10:45 صبح
یه نمونشو می تونی اینجا ببینی :
http://php.robm.me.uk/

بقیشم خودت تو وب جستجو کن

hidensoft
جمعه 05 مرداد 1386, 21:16 عصر
خوب بود.
ولی کاش یه چند تا لینک دیگه هم می زاشتی !

Bahram0110
شنبه 06 مرداد 1386, 22:07 عصر
ممنون از همگی

cybercoder
سه شنبه 16 مرداد 1386, 20:35 عصر
خوب بود.
ولی کاش یه چند تا لینک دیگه هم می زاشتی !




http://suraski.net/blog/
http://www.sitepoint.com/article/php-security-blunders
http://www.php-security.org/

همین طور کتابی از کریش شیفلت هست به نام Essential PHP Security که توسط انتشارات Oreilly منتشر شده

موفق باشید.