راکت
حل شده

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

10 پاسخ

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

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

کمال
کمال
@kamalj
ثبت پرسش جدید

پاسخ‌ها

10
علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

بهترین پاسخ

@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
@developer

تخصص: برنامه نویس

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

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

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

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

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

شاید پاسخ شما همین‌جا باشد

وحید رضازاده
وحید رضازاده
@vahidrezazadeh

تخصص: برنامه نویس

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

وحید رضازاده
وحید رضازاده
@vahidrezazadeh

تخصص: برنامه نویس

@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

تخصص: توسعه دهنده ارشد وب

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

پرهام عظیمی
پرهام عظیمی
@parhamazimy

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

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

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

شهاب اسکندری
شهاب اسکندری
@shahab.es

تخصص: برنامه نویس

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

وحید رضازاده
وحید رضازاده
@vahidrezazadeh

تخصص: برنامه نویس

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

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

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