PDA

View Full Version : تابع امنیتی



olampiad
پنج شنبه 03 مهر 1393, 18:17 عصر
سلام و خسته نباشید به دوستان عزیز
من میخوام ی تابع امنیتی بنویسم و بعد از اینکه داده هارو از فرم گرفتم درون تابع قرار بدم و بعد در دیتابیس ذخیره کنم.
به این تابع من ی نگا بندازید



public function amniat($data){
$one=addslashes($data);
$two=htmlspecialchars($one);
$three=strip_tags($two);
return $three;
}



آیا این تابع رو برای امنیت تعیین میکنید.
چه چیز هایی رو میتونم به این تابعم اضافه کنم تا بهتر و قوی تر بشه.
ممنون

alireza.stack
پنج شنبه 03 مهر 1393, 18:50 عصر
اگر به تابع strip_tags یک whitelist ندهید امن هست و تمامی تگهای HTML رو حذف میکنه. (کاری که کردید امن است)

برای ذخیره داده ها به صورت امن در بانک اطلاعاتی فقط حتما از PDO استفاده کنید و sql_injection رو برای همیشه Mitigate کنید.

سوداگر
پنج شنبه 03 مهر 1393, 19:36 عصر
خب بحث امنیت به کنار... به نظر شما این تابع خروجی قابل قبولی داره؟

ورودی:
\|/+-()*&^%$#@!~?<>

خروجی:
\\|/+-()*&amp;^%$#@!~?&lt;&gt;

خب بهتر نیست از mysqli_real_escape_string استفاده کنید؟!
البته همین مورد (خروجی معقولانه) به integrity که یکی از 3 پایه امنیت (CIA (http://en.wikipedia.org/wiki/Information_security)) محسوب میشه، کاملاً مربوط هست...

olampiad
جمعه 04 مهر 1393, 13:55 عصر
سلام و خسته نباشید به اساتید عزیز
نظرتون در مورد این تابع چیه؟

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



private function amniat($str){
$amniat=trim($str);
$amniat=htmlspecialchars($amniat);
$amniat=strip_tags($amniat);
$amniat=mysql_real_escape_string($amniat);
return $amniat;
}



public function secrut($array){
$arr=$array;
foreach($arr as $key=>$val){
$arr[$key]=$this->amniat($val);
}
return $arr;
}

alireza.stack
جمعه 04 مهر 1393, 17:09 عصر
خب بحث امنیت به کنار... به نظر شما این تابع خروجی قابل قبولی داره؟

ورودی:
\|/+-()*&^%$#@!~?<>

خروجی:
\\|/+-()*&amp;^%$#@!~?&lt;&gt;

خب بهتر نیست از mysqli_real_escape_string استفاده کنید؟!
البته همین مورد (خروجی معقولانه) به integrity که یکی از 3 پایه امنیت (CIA (http://en.wikipedia.org/wiki/Information_security)) محسوب میشه، کاملاً مربوط هست...

تابعی که برای بانک معرفی کرده اید برای حل کردن بحث sql injection مفید است. اما دیتای ورودی کاربر در مقابل CSRF attack کاملا ناامن هست.

موفق باشید.

alireza.stack
جمعه 04 مهر 1393, 17:13 عصر
سلام و خسته نباشید به اساتید عزیز
نظرتون در مورد این تابع چیه؟

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



private function amniat($str){
$amniat=trim($str);
$amniat=htmlspecialchars($amniat);
$amniat=strip_tags($amniat);
$amniat=mysql_real_escape_string($amniat);
return $amniat;
}



public function secrut($array){
$arr=$array;
foreach($arr as $key=>$val){
$arr[$key]=$this->amniat($val);
}
return $arr;
}


دوست عزیز از PDO استفاده کنید. بنده با توجه به تجارب شخصی این پیشنهاد رو میکنم. mysql که کلا منسوخ شده و به هیچ وجه استفاده نکنید. mysqli هم در مواردی unsafe گزارش شده است. تنها روش PDO هست که مشکل امنیتی تا به اکنون نداشته است.

hamedarian2009
جمعه 04 مهر 1393, 17:25 عصر
سلام و خسته نباشید به اساتید عزیز
نظرتون در مورد این تابع چیه؟

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



private function amniat($str){
$amniat=trim($str);
$amniat=htmlspecialchars($amniat);
$amniat=strip_tags($amniat);
$amniat=mysql_real_escape_string($amniat);
return $amniat;
}



public function secrut($array){
$arr=$array;
foreach($arr as $key=>$val){
$arr[$key]=$this->amniat($val);
}
return $arr;
}


خوبه فقط تابع mysql_real_escape_string دیگه منسوخ شده اگه از PDO استفاده میکنی به جاش از addslashes و اگه mysqli از تابع mysqli_real_escape_string l میتونی استفاده کنی

سوداگر
جمعه 04 مهر 1393, 18:28 عصر
تابعی که برای بانک معرفی کرده اید برای حل کردن بحث sql injection مفید است. اما دیتای ورودی کاربر در مقابل CSRF attack کاملا ناامن هست.

موفق باشید.
در مقام ذخیره کردن اطلاعات در پایگاه هیچ اتفاقی نمی افته ولی موقع نمایش اطلاعات هست که باید اطلاعات رو با تابع htmlentities و یا filter_input و ... اسکیپ کرد تا از شر CSRF در امان بود. این که اطلاعات به صورت نامعقولی در دیتابیس ذخیره نشه هم مهمه. امنیت فقط لو رفتن اطلاعات نیست و باید به هر سه جنبه ی مثلث CIA پرداخته بشه. حتی ذخیره کردن ي و ی با هم میتونه ضعف امنیتی باشه، چه رسد به خروجی های عجیب و غریب اون تابع!!!

white tower
جمعه 04 مهر 1393, 21:51 عصر
اگر قراره فقط تو دیتابیس ذخیره کنی real_sacape_string کافیه.ولی اگر قراره تو صفحه ات چاپ کنی باید از اونای دیگه هم تو جای مناسبش استفاده کنی

olampiad
شنبه 05 مهر 1393, 01:07 صبح
سلام و خسته نباشید
به گفته شما من دیگه از pdo استفاده میکنم.
آیا pdo هم نیاز به توابع امنیتی داره
یا
خودش همه چیز رو تامین میکنه.
و ی سوال دیگه؟
آیا من داده هارو از فرم گرفتم مستقیم به pdo بدم یا بازم مثل بالایی از تابع امنیتی ردش کنم.
ممنون

alireza.stack
شنبه 05 مهر 1393, 07:57 صبح
سلام و خسته نباشید
به گفته شما من دیگه از pdo استفاده میکنم.
آیا pdo هم نیاز به توابع امنیتی داره
یا
خودش همه چیز رو تامین میکنه.
و ی سوال دیگه؟
آیا من داده هارو از فرم گرفتم مستقیم به pdo بدم یا بازم مثل بالایی از تابع امنیتی ردش کنم.
ممنون

باید حواستون باشه که با BindParam مقادیر unsafe رو به تابع بفرستین و اگر بخواهید مستقیم در کوئری بزارید بسیار خطرناک است. در داخل bindParam و یا bindValue کاملا خیالت راحت است.