رفتن به مطلب

جلوگیری از حمله به SQL


پست های پیشنهاد شده

سلام.

بازم سوال مربوط به cms تمرینی و جدید :D

و مربوط به ادامه مطلب

از صفحه اول وقتی میخوام لینک به ادامه مطلب بدم، با متد get آیدی اون مطلب(ریکورد) رو میفرستم به صفحه سینگل.

حالا از اونجایی که داخل صفحه سینگل اون آی دی رو میگیرم و باهاش به mysql درخواست فچ میدم، ممکنه کاربر یه سری دستورات اضافه انتهای همون متد بزنه که به دیتابیس نفوذ کنه.

برای پیشگیری از این نفوذ به فکر خودم اینطور رسید که داخل صفحه سینگل اول ورودی get رو بریزم داخل یک متغیر. یه عمل ریاضی روش اجام بدم (مثلاً با 1 جمع کنم). بعد حاصل رو یه مقایسه انجام بدم(مثلا اگر بزرگتر از 1 و کوچتر از 100000بود).

حالا عمل ریاضی رو برگرونم و مقدارش رو بزارم توی کوئری mysql. اینطوری میتونم تا حدودی مطمئن بشم که متد دریافتی من فقط عدد بوده...

اگر ممکنه راه بهتری رو بهم نشون بدید.

مشکل این ایده منم بگید.

ممنون

لینک به ارسال

برای اینکه مطمئن بشی مقداری یک عدد هست میتونی از تابع is_numeric استفاده کنی ، اگر ورودیش عدد بود مقدار true و اگر نبود false را برمیگیرداند

لینک به ارسال

برای اینکه مطمئن بشی مقداری یک عدد هست میتونی از تابع is_numeric استفاده کنی ، اگر ورودیش عدد بود مقدار true و اگر نبود false را برمیگیرداند

بله ممنون

سوال بنده اینه که آیا همین چک کردن نوع ورودی، امنیت کافی رو به ما میده؟

اگه تولید لینک یکتا برای هر ادامه مطلب مد نظرتون نیست با SESSION ارسال کنید

ممنون دوست عزیز

اما خب "لینک برای ادامه مطلب" حتماً نیاز به لینک یکتایی که فرمودید داره.

دقیقاً کاربر تنها با آدرس وارد کردن باید بتونه دسترسی به صفحه مطلب رو داشته باشه.

لینک به ارسال

شما میتونین 2 تا کار انجام بدید

1. مقادیر رو به صورت پارامتر به دیتابیس ارسال کنید مثلا اگه از pdo استفاده میکنید با استفاده از تابع prepare و execute استفاده کنید

2.قبل از ارسال مقدار به کوئری اونو اعتبار سنجی کنید مثلا با استفاده از تابع is_numeric یا با استفاده از ریجکس \d+ اونو اعتبار سنجی کنید

لینک به ارسال

ببینید اگر می خواید مقدار ارسالی در get رو بگید ، خوب بالا خره یک چیزی در url میره و اگر کاربر با تغییر اونا بخواد وارد بشه خوب بهش 404 میده

اما اگر م یخواید از تزریق sql جلوگیری کنید از توابع امنیتی html_specialchar و real_scape_string استفاده کنید.

لینک به ارسال

شما میتونین 2 تا کار انجام بدید

1. مقادیر رو به صورت پارامتر به دیتابیس ارسال کنید مثلا اگه از pdo استفاده میکنید با استفاده از تابع prepare و execute استفاده کنید

ممنون وایپر جان

منم در مورد پارامتر شنیده بودم.

امکانش هست برای کار با پارامتر توضیحات بیشتر بدید؟

یا یه لینک مفید...

متشکر

لینک به ارسال

مثال



[color=#000000][color=#0000BB]<?php[/color]
[color=#FF8000]/* Execute a prepared statement by passing an array of insert values */[/color]
[color=#0000BB]$calories [/color][color=#007700]= [/color][color=#0000BB]150[/color][color=#007700];[/color]
[color=#0000BB]$colour [/color][color=#007700]= [/color][color=#DD0000]'red'[/color][color=#007700];[/color]
[color=#0000BB]$sth [/color][color=#007700]= [/color][color=#0000BB]$dbh[/color][color=#007700]->[/color][color=#0000BB]prepare[/color][color=#007700]([/color][color=#DD0000]'SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?'[/color][color=#007700]);[/color]
[color=#0000BB]$sth[/color][color=#007700]->[/color][color=#0000BB]execute[/color][color=#007700](array([/color][color=#0000BB]$calories[/color][color=#007700], [/color][color=#0000BB]$colour[/color][color=#007700]));[/color]
[color=#0000BB]?>[/color] [/color]


http://www.php.net/manual/en/pdostatement.bindparam.php
http://www.php.net/manual/en/pdo.prepare.php

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...