• 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()تشخیص نوع اجرای درخواست.

سایر پست های داکیومنت