nuri60
// Doğru
DB::table('users')
->where('id', $id)
->first();
// Doğru
DB::select("SELECT * FROM users WHERE id = ?", [$id]);
// Yanlış.
DB::select("SELECT * FROM users WHERE id = $id");
// $user bir User ise doğru
Rule::unique('users')->ignore($user); // ya da $user->id
// Yanlış. ignore kuralına kullanıcı tarafından girilen veri vermemeniz lazım.
// Ben bu tür durumlarla kalmamak için, validation içinde SQL sorgusu
// yapacaksanız kendi kuralınızı yazmanızı öneriyorum.
Rule::unique('users')->ignore($this->input('id')); // $this burada Request
SQL açığı değil ama veri tabanı işlemlerinde yapılan yanlışlardan bazıları:
// Yanlış. Bu örnekte $column alanı sınırlandırılmadığı için veri tabanınıza dışarıdan müdahale
// edilmesine izin vermiş oluyorsunuz. Ya bu tür kullanımlardan kaçınacaksınız ya da
// $column alanının alabileceği değerleri sınırlandıracaksınız.
$column = $request->input('update_column');
$user->update([
$column => $request->input('value'),
]);
// order_by değerini ASC ya da DESC ile sınırlandırmadıysanız yanlış.
$users = User::orderBy('id', $request->input('order_by'))
->simplePaginate();
// Yanlış. Eğer sayfa başı kayıt sayısını kullanıcı belirleyecekse mutlaka maksimum değer
// belirlemeniz lazım. Kullanıcı 99999 vererek sunucunuzu patlatabilir.
$users = User::paginate($request->integer('per_page'));
// Yanlış. Form request kullandığınızda $request->all() ya da $request->input() kullanmamanız
// lazım çünkü bu yöntemler sınamaya girsin girmesin tüm http parametrelerini alır. Bunlar
// yerine $request->validated() ve $request->safe() kullanmanız lazım. Dokümanlarda
// örnekler var.
public function store(UpdateUserRequest $request, User $user)
{
$user->update($request->all());
//...
}
Aklıma gelenler bunlar.