جلو گیری از دیده شدن id ها

3 سال پیش توسط کمال مطرح شد
آنلاین
user-avatar
کمال ( 3249 تجربه )
3 سال پیش
تخصص : برنامه نویس ارشد وب

لینک کوتاه اشتراک گذاری

0

سلام من یه سوالی داشتم
ببینید من یه مشکلی دارم که مثلا کاربر میخواد برای پستی کامنتی بذاره
خوب من post_id داخل input هیدن میذارم و میفرستم
ولی توی inspect هیدن نیست و میشه تغییرش داد
مثلا کاربر میتونه بره post_id=88 رو بکنه post_id=70 و کامنت اون برای پست 70 ارسال میشه

داخل همین انجمن راکت
من میتونم توی textarea با استفاده از inspect شناسه سوال رو دربیارم و برم توی یک سوال دیگه شناسه رو جایگزین کنم و جواب رو بدم
و جواب برای سولی که شناسه اش رو دستی وارد کردم ارسال میشه
چطوری میشه جلوی این کار رو گرفت و نگذاشت که کاربر اصلا id رو ببینه که بتونه تغییرش بده
با تشکر

بهترین پاسخ
آفلاین
user-avatar
علی بیات
3 سال پیش

@vahidrezazadeh

با استفاده از Route-Model Binding نمونه ی مدلی که میخواهیم عملیاتی بر روی اون انجام دهیم به عنوان پارامتر به route افزوده میشه. برای مثال به جای افزودن ID پست، میتونید نمونه ایجاد شده از مدل پست را به کنترلر بفرستید.

به زبان کد اگر بخواهیم بگیم:

Route زیر رو در نظر بگیرید

Route::get('post/{post}', '[email protected]');

کد در کنترلر بدون Route-Model Binding :

<?php

namespace App\Http\Controllers;
use App\Post;

class PostController extends Controller
{
    public function show($id) {
        $post = Post::find($id);
        return $post
    }
}

کد در کنترلر با Route-Model Binding :

<?php

namespace App\Http\Controllers;
use App\Post;

class PostController extends Controller
{
    public function show(Post $post) {

        return $post
    }
}
آفلاین
user-avatar
developer ( 38642 تجربه )
3 سال پیش
تخصص : برنامه نویس

لینک کوتاه اشتراک گذاری

0

خب این کار رو بکنه چه فایده ای واسش داره؟ ضربه ای که نمیتونه به سایت بزنه

آفلاین
user-avatar
علی بیات ( 449169 تجربه )
3 سال پیش
تخصص : توسعه دهنده ارشد وب

لینک کوتاه اشتراک گذاری

1

بجای استفاده از <Input> هیدن برای مقدار post_id میشه از ریلیشن‌شیپ های بین مدل‌ها استفاده کرد

$post->comment()->save([
    'comment_body' => 'foo bar',
    'user_id' => auth()->user()->id
]);

در این حالت مقدار post_id بصورت اتوماتیک مقداردهی میشه.

آفلاین
user-avatar
وحید رضازاده ( 17169 تجربه )
3 سال پیش
تخصص : برنامه نویس

لینک کوتاه اشتراک گذاری

0

@ali.bayat
سلام
خب این $post رو که باید پیدا کنه ...

آفلاین
user-avatar
وحید رضازاده ( 17169 تجربه )
3 سال پیش
تخصص : برنامه نویس

لینک کوتاه اشتراک گذاری

2

@tabeshr
سلام
ببییند این کار آسیبی به سایت نمیزنه
فرض کنید post_id رو تغییر بده . چه اتفاقی میافته ؟
ولی یک کاری میتونید بکنید که خیلی نمیپنسدم
اونم اینکه که فرض کنید آدرس پست شما این باشه : site.com/post/laravel-controllers
(مثلا این laravel-controllers آدرس یا همون slug شما هست)
توی فرمی که کامنت رو سابمیت میکنه به action مقدار ندین که رد نتیجه فرم سابمیت میشه به همون آدرس site.com/post/laravel-controllers ، (یا حتی میتونید مقدار action رو همین site.com/post/laravel-controllers بدین)
حالا میتونید یک route با متد post بسازین که با slug کار کنه و دیگه id ندین
مثلا

Route::get('post/slug','[email protected]_post');
Route::post('post/slug','[email protected]_comment');
آفلاین
user-avatar
علی بیات ( 449169 تجربه )
3 سال پیش
تخصص : توسعه دهنده ارشد وب

لینک کوتاه اشتراک گذاری

1

@vahidrezazadeh
$post رو براحتی با Route Model Binding میشه درآورد.

آفلاین
user-avatar
پرهام عظیمی ( 2445 تجربه )
3 سال پیش

لینک کوتاه اشتراک گذاری

0

از نظر امنیتی مشکلی وجود نداره ولی اگر بخوای جلوش رو بگیری بهترین کار اینه که id رو با یه کلید خاص رمز گذاری کنی بفرستی داخل input hidden و موقع گرفتن درخواست مقدار رمزگذاری شده رو با کلید خاص دوباره به id برگردونی .

آفلاین
user-avatar
سیدعلی موسوی ( 145518 تجربه )
3 سال پیش
تخصص : سی شارپ و پی اچ پی

لینک کوتاه اشتراک گذاری

0

جمله ی اقای بیات رو خوب بخونید و اجرا کنید.

آفلاین
user-avatar
شهاب اسکندری ( 200 تجربه )
3 سال پیش
تخصص : برنامه نویس

لینک کوتاه اشتراک گذاری

0

سلام
یه راه دیگه این هست که وقتی شما وارد اون پُست خاص میشید، آی دی اون پُست رو توی session ذخیره کنید
و در کلاس مورد نظرتون که عملیات درج رو انجام میدید، از اون Session بخونید
البته من این کار رو برای پروژه هایی که از معماری خاصی استفاده نمیکنن انجام میدم، نمیدونم برای لاراول منطقی هست یا نه و از قوانین mvc پیروی میکنه یا خیر

آفلاین
user-avatar
وحید رضازاده ( 17169 تجربه )
3 سال پیش
تخصص : برنامه نویس

لینک کوتاه اشتراک گذاری

0

@ali.bayat
خب باید یک ID چیزی باشه...

آفلاین
user-avatar
علی بیات ( 449169 تجربه )
3 سال پیش
تخصص : توسعه دهنده ارشد وب

لینک کوتاه اشتراک گذاری

0

@vahidrezazadeh

با استفاده از Route-Model Binding نمونه ی مدلی که میخواهیم عملیاتی بر روی اون انجام دهیم به عنوان پارامتر به route افزوده میشه. برای مثال به جای افزودن ID پست، میتونید نمونه ایجاد شده از مدل پست را به کنترلر بفرستید.

به زبان کد اگر بخواهیم بگیم:

Route زیر رو در نظر بگیرید

Route::get('post/{post}', '[email protected]');

کد در کنترلر بدون Route-Model Binding :

<?php

namespace App\Http\Controllers;
use App\Post;

class PostController extends Controller
{
    public function show($id) {
        $post = Post::find($id);
        return $post
    }
}

کد در کنترلر با Route-Model Binding :

<?php

namespace App\Http\Controllers;
use App\Post;

class PostController extends Controller
{
    public function show(Post $post) {

        return $post
    }
}
برای ارسال پاسخ لازم است، ابتدا وارد سایت شوید.