کمال
6 سال پیش توسط کمال مطرح شد
10 پاسخ

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

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

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


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
0

@vahidrezazadeh

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

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

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

Route::get('post/{post}', 'PostController@show');

کد در کنترلر بدون 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
    }
}

developer
تخصص : برنامه نویس
@developer 6 سال پیش مطرح شد
0

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
1

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

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

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


وحید رضازاده
تخصص : برنامه نویس
@vahidrezazadeh 6 سال پیش مطرح شد
0

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


وحید رضازاده
تخصص : برنامه نویس
@vahidrezazadeh 6 سال پیش مطرح شد
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','HomeController@show_post');
Route::post('post/slug','HomeController@store_comment');

علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
1

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


پرهام عظیمی
@parhamazimy 6 سال پیش مطرح شد
0

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


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 6 سال پیش مطرح شد
0

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


شهاب اسکندری
تخصص : برنامه نویس
@shahab.es 6 سال پیش مطرح شد
0

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


وحید رضازاده
تخصص : برنامه نویس
@vahidrezazadeh 6 سال پیش مطرح شد
0

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
0

@vahidrezazadeh

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

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

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

Route::get('post/{post}', 'PostController@show');

کد در کنترلر بدون 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
    }
}

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

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