پرهام ناصحی
2 سال پیش توسط پرهام ناصحی مطرح شد
4 پاسخ

جلوگیری از تقلب در ارسال درخواست با AJAX

سلام ،
اگر با AJAX آشنایی داشته باشید می دونید که AJAX اطلاعات رو بدون اینکه صفحه ریفرش یا تازه بشه ارسال میکنه . ولی این کار مشکلاتی رو نیز به همراه داره . یکی از مشکلاتش اینه که کاربر می تونه حتی بدون استفاده از AJAX و با ساخت یک فرم و ارسال اطلاعات بدون اعتبار (منظورم از بدون اعتبار اینه که من مثلا داده ی A رو فقط میخوام عدد باشه ولی کاربر میاد و رشته میده ) دیتابیس رو با خطا مواجه کنه .

در کل ساده بگم ، میخوام فقط ارسال اطلاعات به یک صفحه از طریق AJAX انجام بشه . یا یه راهی باشه که تشخیص بدم که اطلاعات با AJAX ارسال شده ( مثلا از توکن استفاده کنم یا یه چیز دیگه )

@mhyeganeh @endworld @rezajahangir @erfanmohseni406 @abol313 @shift.delete @SpyStar0003 @TGame @developer @sinashahoveisi


ثبت پرسش جدید
سینا شاه‌اویسی
تخصص : برنامه نویس فرانت اند
@sinashahoveisi 2 سال پیش مطرح شد
4

سلام
کلا وقتی یک api ساخته میشه باید عملیات ولیدیشن هم سمت بک اند انجام بشه هم سمت فرانت اند تا اگه کسی خودش درخواست ajax رو با استفاده از api فرستاد جلوگیری بشه از قرار گرفتن داده های فیک توی دیتابیس.

و اینکه کلا اگه میخواهید بفهمید که دیتا از صفحه شما ارسال شده یا نه معمولا اینکار رو با یه csrf token انجام میدن که یه توکن که از بک اند ساخته میشه روی فرم و وقتی ارسال میشه اگه این token ارسال نشه، اررور میده و درخواست پردازش نمیشه.
شما باید یک جوری تشخیص بدید که اطلاعات از وبسایت شما ارسال میشه یا از جای دیگه. برای اینکار هم از cros origin استفاده میکنند که درخواست ها فقط از طریق url که شما بهش گفتید پردازش میشه و نه url های دیگه


محمد زورمند
تخصص : react developer
@SpyStar0003 2 سال پیش مطرح شد
0

سلام

تشکر بابت تگ گردن ولی...
متاسفانه اطلاعی در این زمینه ندارم


سینا شاه‌اویسی
تخصص : برنامه نویس فرانت اند
@sinashahoveisi 2 سال پیش مطرح شد
4

سلام
کلا وقتی یک api ساخته میشه باید عملیات ولیدیشن هم سمت بک اند انجام بشه هم سمت فرانت اند تا اگه کسی خودش درخواست ajax رو با استفاده از api فرستاد جلوگیری بشه از قرار گرفتن داده های فیک توی دیتابیس.

و اینکه کلا اگه میخواهید بفهمید که دیتا از صفحه شما ارسال شده یا نه معمولا اینکار رو با یه csrf token انجام میدن که یه توکن که از بک اند ساخته میشه روی فرم و وقتی ارسال میشه اگه این token ارسال نشه، اررور میده و درخواست پردازش نمیشه.
شما باید یک جوری تشخیص بدید که اطلاعات از وبسایت شما ارسال میشه یا از جای دیگه. برای اینکار هم از cros origin استفاده میکنند که درخواست ها فقط از طریق url که شما بهش گفتید پردازش میشه و نه url های دیگه


آرش دولتی مهر
@arashdm2020 2 سال پیش مطرح شد
3

از Vue js استفاده کنید
ضمنا همینطوری که شاه‌اویسی فرمودن درخواست ها با CSRF از ارسال میشه و امکان استفاده از توکن تکراری وجود نداره از به این مثال توجه کنید
کد مربوط به متا

<meta name="csrf-token" content="{{ csrf_token() }}">

این بخش رو در ابتدای اسکریپت قرار بدین :

    $.ajaxSetup({
            headers: {
               'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
         });

مثال :

   <script>
      function getData() {
         console.log("ABCD");
         $.ajaxSetup({
            headers: {
               'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
         });
         $.ajax({
            type:'POST',
            url:'/getdata',
            success:function(data) {
               $("#data").html(data.msg);
            },
            error: function (msg) {
               console.log(msg);
               var errors = msg.responseJSON;
            }
         });
      }
   </script>

موفق باشید


Mahdi
تخصص : :) عاشق js و php (:
@mahdisamadiyan82 2 سال پیش مطرح شد
1

سلام موقعی که با ایجکس به سمت یه فایل php حاوی josn ( مثلا json.php) ریکوئست میفرستی میتونی کنترل کنی از کدام url (از کدوم سایت) این درخواست ارسال شده و اگه با url ی که مد نظر خودته مطابقت داشته باشه json چاپ بشه در غیر این صورت json چاپ نشه.
اگه اشتباه نکنم کد زیر لینکی که ریکوئست از اون صفحه به به فایل php حاوی json خودت فرستاده میشه رو بهت میگه :

$_SERVER['HTTP_REFERER'] 

مثلا یکی از سایت example.com/form.php به فایل php که توش json داری ریکوئست میفرسته(مثلا json.php) درحالی که فرم ارسال ریکوئست تو توی سایت خودت قرار داره mysite.com/form.php در نتیجه میتونی توی json.php با اون کدی که بهت دادم جلوی ریکوست رو بگیری.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام