سلام و خسته نباشید
من میخواستم یک تابع داشته باشم که هر داده ای رو از کاربر و یا url دریافت کردم رو از طریق این تابع ایمن سازی بکنم
ممنون میشم یک تابع جامع و مطمئن رو معرفی کنید
تشکر
سلام و خسته نباشید
من میخواستم یک تابع داشته باشم که هر داده ای رو از کاربر و یا url دریافت کردم رو از طریق این تابع ایمن سازی بکنم
ممنون میشم یک تابع جامع و مطمئن رو معرفی کنید
تشکر
انجمن سئو فروم (Https://seoforum.ir)؛ تالار پرسش و پاسخ سئو و دیجیتال مارکتینگ ایران
سلام.
واسه این کار در PHP چندین تابع وجود داره. در ضمن باید مشخص بشه قصدتون دقیقا چه نوع ایمن سازی ای هست.
کلا 3 نوع ایمن سازی داده داریم:
- Validating
- Sanitizing
- Escaping
Validating یا معتبرسازی: مواقعی استفاده میشه که شما قصد داشته باشی نوع خاصی از داده ورودی رو دریافت کنی. مثلا شماره موبایل، جنسیت، لیست شهرها و ...
نوشتن توابع معتبرسازی هم به عهده ی خود کاربره (البته هستند توابع و کلاسهایی که این کارها رو بکنند ولی برخی مواقع پیش میاد که شما میخوایید داده ورودی کاربر یه فرم خاص باشه. مثلا اجازه ثبت نام فقط و فقط با شماره خط رایتل! که چک کردن اینکه آیا داده ورودی مربوط به تلفن همراه، به فرم درست پیش شماره های رایتل دریافت شده یا خیر به عهده شماست و می تونید به فرض از تابع preg_match استفاده کنید.)
Sanitizing یا پاکسازی: در پاکسازی داده، داده ورودی در برابر انواع کدهای مخرب چک میشه. مثلا کابر کد جاوا اسکریپت تا تگهای html رو وارد نکنه و ... چند تا از توابع این کار:
- htmlentities
- htmlspecialchars
- strip_tags
Escaping: اینجا باید حواسمون باشه که داده کاربر رو چطور میخواییم نمایش بدیم و چطور میخواییم ذخیره کنیم!
یعنی چی؟ یعنی ما با استفاده از Validating, Sanitizing مطمئن شدیم که کاربر داده های معتبری وارد کرده و همچنین مثلا تگهایی رو هم که دوست نداشتیم وارد کنه رو از ورودی پاک کردیم. حالا به فرض ممکنه ما اجازه داده باشیم که کاربر از تگهای b, center, video, audio, p, a واسه داده ورودی استفاده کرده باشه. خوب، تا اینجای کار مشکلی نیست و داده درست و طبق چیزی که خواستیم ذخیره شده. حالا واسه نمایش، شاید توی صفحه خاص دوست نداشته باشیم که اون داده کاربر که با تگ b و به صورت بولد ذخیره شده بوده به صورت بولد هم نمایش داده بشه! اینجاست که از escaping استفاده می کنیم. یعنی اجازه نمیدیم کدهای ذخیره شده، کاری رو که قرار بوده بکنند انجام بدند! امیدوارم متوجه شده باشید چی میگم. یا مثلا موقع ثبت داده در پایگاه داده. باید مواظب باشیم که SQL Injection کار دستمون نده!
شما اگه این 3 مفهوم رو خوب متوجه بشید به سادگی میتونید سایتتون رو ایمن کنید. البته اینها ایمن سازی سمت کد هستند و ایمن سازی سمت سرور هم یه بحث جداست!
راستی حواستون به cross site request forgery هم باشه. اگر ما سایت رو در برابر حملات XSS یا cross site scripting مقاوم کنیم باید حواسمون به cross site request forgery هم باشه که مبادا همه چی رو رعایت کرده باشیم ولی از این نقطه که اکثر افراد هم ازش غافل هستند سایتمون آسیب ببینه.
موفق باشید.
انجمن سئو فروم (Https://seoforum.ir)؛ تالار پرسش و پاسخ سئو و دیجیتال مارکتینگ ایران
خواهش میکنم.
شما میتونید تمام داده های ورودی رو بدید به یکی از توابع Sanitization و خیال خودتون رو راحت کنید اما نه صد در صد. در ضمن این کار توصیه نمیشه. شما باید بدونید میخوایید با داده چکار کنید و طبق همون سیاست پیش برید. مثلا شاید یه فیلد ورود داده ی ویزی ویگ داشته باشید. به فرض، استفاده از تابع strip_tags باعث میشه که ورودی کابر آسیب ببینه و درست ذخیره نشه!
CSRF هم مواقعی استفاده میشه که قصد داشته باشیم مطمئن باشیم داده ی کاربر از محل درست داره وارد میشه و نه جای دیگه! دقیقا همون کاری که wp nonce field توی وردپرس انجام میده.
سلام
این تابع پیشنهادی سایت w3schools.com برای ایمن سازی ورودی ها هستش:
منبع: https://www.w3schools.com/php/php_form_validation.aspکد PHP:
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
خودت یک تابع بنویس بر اساس نوع ورودی ***** کنه:
کد:function clean($input, $type) { switch($type) { case 'int': return intval($input); break; case 'float': return floatval($input); break; case 'nohtml': return htmlspecialchars($input); break; case 'html': return floatval($input); break; } } $input = mysqli_real_escape_string($input);
جشنواره وب ایران یا جشنواره معرفی دوستان!!!
در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)