توسعه و امنیت

جلوگیری از SQL Injection با داده پارامتری و انتخاب‌های محدود

ورودی کاربر نباید به بخشی از دستور SQL تبدیل شود. جدا نگه داشتن متن پرس‌وجو از مقدارها، یکی از پایه‌های حفاظت از داده‌های برنامه است.

تحریریه وین وب۱۴۰۵/۰۷/۲۵ ۲ دقیقه مطالعه
جلوگیری از SQL Injection با داده پارامتری و انتخاب‌های محدود

ورودی کاربر نباید به بخشی از دستور SQL تبدیل شود. جدا نگه داشتن متن پرس‌وجو از مقدارها، یکی از پایه‌های حفاظت از داده‌های برنامه است.

مقدارها را با prepared statement بفرستید

ایمیل، شناسه و متن جستجو را در جایگاه پارامتر قرار دهید. چسباندن رشته‌ها حتی پس از چند جایگزینی دستی، الگوی قابل اتکایی نیست. اعتبارسنجی نوع و طول نیز همچنان لازم است؛ پارامتری بودن پرس‌وجو به معنی صحیح بودن منطق کسب‌وکار نیست.

نام جدول و ترتیب را از فهرست مجاز انتخاب کنید

پارامتر معمولاً جای نام ستون یا جهت مرتب‌سازی را نمی‌گیرد. اگر کاربر روش مرتب‌سازی را تعیین می‌کند، کلید ورودی را به یک عبارت از پیش تعیین‌شده نگاشت کنید. نام جدول نباید مستقیم از درخواست خوانده شود. بخش‌های عددی صفحه‌بندی نیز باید نوع و محدوده روشن داشته باشند.

مجوز و تراکنش را فراموش نکنید

پرس‌وجوی امنی که فاکتور هر مشتری را به هر حساب نشان دهد، هنوز نقص دسترسی دارد. شرط مالکیت باید به درخواست متصل باشد. برای تغییر چند رکورد مالی مرتبط، تراکنش و کنترل همزمانی را متناسب با مسئله طراحی کنید.

  • مقدارها را پارامتری ارسال کنید.
  • ساختار متغیر پرس‌وجو را محدود کنید.
  • دسترسی کاربر به همان رکورد را جدا بررسی کنید.
درباره پروژه من

در ادامه بخوانید