PDA

View Full Version : ایمن کردن تگ input توسط php



aszasz
سه شنبه 17 دی 1392, 08:33 صبح
سلام دوستان من یک مشکل اساسی دارم که شاید خیلی از وب مسترها داشته باشند
مشکل اینه که تگ <input> در html باعث و بانی اکثر هک ها و خرابکاری هاست هرچی میایم با جاوا اسکریپت و افشن های خود این تگ مثل maxlength="4" و... خوب محدودش میکنیم که نشه کارکتر های ناخواسته رو واردش کنند اما باز هم به لطف inspect element این مرورگر ها هیچ کدوم کار ساز نیست و هرچی دوست دارند از اونجا با تغییر value وارد میکنند.:عصبانی++:

در هر صورت بهترین راه مقابله با این مشکل قرار دادن یک کد php توی مسیرش هست که دیگه 100% مطمئن هست و قابل دور زدن هم نیست. از دوستان می خوام یک کد یا یک function باشه بهتره ( که بشه به راحتی همه جای اسکریپ سریع ازش استفاده کرد ) درست کنند که بیاد بررسی کنه اگر ورودی تگ شامل کارکتر های غیر مجاز که خودمون براش تعریف میکنیم مثلا ><%/+_ و .. باشه بیاد false بفرسته که بشه توی یک شرط ازش استفاده کرد.
برای این کار فکر کنم تابع preg_match فکر میکنم خیلی کمک میکنه
دوستان لطفا راهنمایی کنند دیگه واقعا خسته شدم اینقدر که از این تگ input ضربه خوردم!:ناراحت:

marys_farahani
سه شنبه 17 دی 1392, 09:44 صبح
راه اول:

Validate filters (http://ir2.php.net/manual/en/filter.filters.validate.php)

و راه دوم



<?php
$result = mysql_real_escape_string("$value"); // for string
$result = (int) mysql_real_escape_string("$value"); // for int
?>




راه سوم: اینم برای اینکه بیشتر از کاراکتری که میخوایی نتونه وارد دیتابیس کنه

strlen (http://ir2.php.net/strlen)

راه چهارم: هرچی که کاربر وارد کرده باشه از نوع عدد صحیح میکنه

intval (http://ir1.php.net/intval)


اینها به ذهنم رسید دوست گرامی به راحتی میتونی جلوی این حملات بگیری.

aszasz
سه شنبه 17 دی 1392, 10:15 صبح
راه اول:

Validate filters (http://ir2.php.net/manual/en/filter.filters.validate.php)

و راه دوم



<?php
$result = mysql_real_escape_string("$value"); // for string
$result = (int) mysql_real_escape_string("$value"); // for int
?>




راه سوم: اینم برای اینکه بیشتر از کاراکتری که میخوایی نتونه وارد دیتابیس کنه

strlen (http://ir2.php.net/strlen)

راه چهارم: هرچی که کاربر وارد کرده باشه از نوع عدد صحیح میکنه

intval (http://ir1.php.net/intval)


اینها به ذهنم رسید دوست گرامی به راحتی میتونی جلوی این حملات بگیری.

ببینید مثلا من تگ input گذاشتم که کاربر برای خودش نام کاربری انتخاب کنه خب این ممکنه هم عدد باشه و هم حروف فارسی و انگلیسی
این روش ها که شما دادید بررسی کردم برای فیلتر کردن عدد یا حرف بکار میرن و نمیتونه اینجا برای من کاربرد داشته باشه
مثلا اینجا کاربر میاد میزنه <script> خب این یک تگ درست میکنه و موقع لود صفحه ای که میخواد نام کاربری رو نمایش بده html صفحه بهم میریزه کلا . من دنبال چیزی ام که نتونه > یا < بزنه مثلا

meysam1366
سه شنبه 17 دی 1392, 10:54 صبح
سلام دوست عزیز

شما میتونید از این تابع خود php استفاده کنید


htmlentities

در لینک زیر هم میتونید راه حلش رو ببینید

http://www.w3schools.com/html/html_entities.asp

metal gear solid 4
سه شنبه 17 دی 1392, 12:14 عصر
HTML Purifier (http://htmlpurifier.org/)
با این کتابخونه به صورت 100 در 100 نگرانی شما از حملات مختلف از جمله XSS برطرف میشه.

aszasz
سه شنبه 17 دی 1392, 12:36 عصر
HTML Purifier (http://htmlpurifier.org/)
با این کتابخونه به صورت 100 در 100 نگرانی شما از حملات مختلف از جمله XSS برطرف میشه.

من زیاد حرفه ای نیستم الان این رو باید بریزم روی هاستم؟!

aszasz
سه شنبه 17 دی 1392, 12:37 عصر
سلام دوست عزیز

شما میتونید از این تابع خود php استفاده کنید


htmlentities

در لینک زیر هم میتونید راه حلش رو ببینید

http://www.w3schools.com/html/html_entities.asp

این دقیقا همون کدی هست که می خوام اما نمدونم روی هاستم چرا درست جواب نمیده

Unique
سه شنبه 17 دی 1392, 12:47 عصر
ببینید ! به نظر من شناخت شما از مشکلتون بسیار بسیار کمه و دلیل من هم اینه که input را مقصر میدونید ! خود این نشون میده نسبت به مشکلتون آگاهی ندارین.
تامین امنیت در درجه اول مربوط به برنامه نویس و در درجه دوم هاست میشه و element های html هیچ نقشی در این زمینه ندارند.

برنامه نویس باید حملات گوناگون را بشناسه و در موردش از ابزار مناسب استفاده کنه ، به عنوان مثال برای sql injection باید مقادیر را به درستی escape کنه یا از prepared statement ها استفاده کنه و مقادیر را ارزیابی کنه (مثلا مقادیر عددی به عدد باشند در غیر این صورت حالت پیش فرض بگذاره). یا مثلا در مورد حملات xss اگه نیاز به ورود اطلاعات از طریق html نیست همیشه مقادیر را با htmlentities بی اثر کنه و در صورت نیاز به html از HTML Purifier استفاده کنه (این یک کلاسه که باید برنامه نویس توی کد ازش استفاده کنه و جایی ریختنی نیست). تازه اینها حملات شناخته شده تر هستند و حملات دیگه هم وجود داره اما میشه گفت بیش از ۹۵٪ مشکلات با رعایت این مسائل حله.

پیشنهاد میکنم از یک برنامه نویس بخواهین تا این موضوعات را توی سایت شما چک کنه و نظرش را بگه !

danial.saeedi
سه شنبه 17 دی 1392, 13:24 عصر
سلام دوست عزیز به وسیله filter_var (http://ir2.php.net/filter_var) می تونید input فیلتر کنید.
موفق باشید