- سهشنبه 28 مهر 1405 ساعت 05:00
- 3.1.9
- کامل شده
- منقضی شده
Input Class در CodeIgniter 3 راه استاندارد خواندن دادههای ورودی درخواست HTTP را فراهم میکند. این کلاس بهجای دسترسی مستقیم و پراکنده به آرایههای سراسری PHP، API مشخصی برای Query String، فرم POST، Cookie، Server Variable، Header و بدنه خام درخواست ارائه میدهد. داده ورودی همچنان غیرقابل اعتماد است و باید پیش از استفاده اعتبارسنجی شود.
خواندن GET و POST
متدهای get() و post() یک کلید مشخص یا مجموعهای از دادههای درخواست را میخوانند. get_post() در صورت نیاز هر دو منبع را بررسی میکند. پارامتر دوم امکان XSS Filtering قدیمی را فعال میکند، اما برای امنیت خروجی باید Escape متناسب با Context را جداگانه انجام دهید.
$productId = $this->input->get('product_id');
$quantity = $this->input->post('quantity');
$payload = $this->input->post(NULL, TRUE);Cookie و Header
cookie() مقدار Cookie را میخواند و set_cookie() برای ساخت Cookie با گزینههایی مانند زمان انقضا، مسیر، دامنه و Secure استفاده میشود. request_headers() همه Headerهای درخواست را برمیگرداند و get_request_header() یک Header مشخص را میخواند. برای داده حساس، Cookie باید با تنظیمات Secure و HttpOnly و سیاست SameSite مناسب ارسال شود.
$token = $this->input->get_request_header('X-Request-Token', TRUE);
$headers = $this->input->request_headers();
$sessionHint = $this->input->cookie('session_hint', TRUE);اطلاعات درخواست
server() مقدارهای انتخابی از آرایه Server را میخواند. ip_address() آدرس IP قابل مشاهده برای برنامه را برمیگرداند و valid_ip() قالب IPv4 یا IPv6 را بررسی میکند. user_agent() رشته User-Agent را میدهد، method() متد HTTP را مشخص میکند، is_ajax_request() درخواست AJAX را تشخیص میدهد و is_cli_request() اجرای CLI را بررسی میکند. در نسخه 3.1.9، is_cli_request() Deprecated شده و Alias تابع is_cli() است. هیچکدام از IP و User-Agent بهتنهایی هویت کاربر را اثبات نمیکنند.
$method = $this->input->method(TRUE);
$remoteIp = $this->input->ip_address();
$isValidIp = $this->input->valid_ip($remoteIp);
$isAjax = $this->input->is_ajax_request();
$isCli = $this->input->is_cli_request();
$serverName = $this->input->server('SERVER_NAME');خواندن بدنه خام
برای درخواستهایی مانند JSON یا Webhook میتوانید از raw_input_stream یا input_stream() استفاده کنید. پس از خواندن بدنه، آن را با JSON Decoder پردازش و ساختار مورد انتظار را اعتبارسنجی کنید. اندازه بدنه و نوع محتوا نیز باید کنترل شود.
$raw = $this->input->raw_input_stream;
$data = json_decode($raw, TRUE);
if (json_last_error() !== JSON_ERROR_NONE || !is_array($data)) {
show_error('درخواست نامعتبر است', 400);
}نکته مهم
Input Class ابزار اعتبارسنجی کامل نیست. برای فرمها از Form Validation استفاده کنید، برای Query دیتابیس از Binding و Query Builder بهره ببرید و برای خروجی HTML داده را Escape کنید.
مطالعه مرتبط
برای ادامه مطالعه، CSRF، XSS، SQL Injection را ببینید.
متدهای Input Class
| متد یا مفهوم | کاربرد |
|---|---|
get() و post() | خواندن داده Query String و فرم. |
get_post() | خواندن داده از GET یا POST. |
cookie() | خواندن Cookie درخواست. |
server() | خواندن مقدار انتخابی از Server Variables. |
request_headers() | دریافت Headerهای درخواست. |
get_request_header() | خواندن یک Header مشخص. |
raw_input_stream و input_stream() | خواندن بدنه خام یا Form-encoded درخواست. |
ip_address() و valid_ip() | دریافت و اعتبارسنجی IP. |
user_agent() و method() | دریافت User-Agent و HTTP Method. |
is_ajax_request() و is_cli_request() | تشخیص نوع اجرای درخواست. |