2017-08-01 1 views
-2

J'utilise Laravel 5.4. J'ai un formulaire où je prends quelques entrées de l'utilisateur. Les variables de formulaire sont directement insérées dans la base de données. Je veux m'assurer que l'assuré n'entre rien dans la base de données. J'ai entendu parler de quelque chose de SQL Injection mais je n'en sais pas grand-chose.Comment empêcher l'injection SQL dans Laravel 5.4

Ceci est ma fonction.

public function insert_data(Request $request) 
{ 
    $company_details_data = ['job_id'   => $maxID, 
           'company_id'  => $company_id, 
           'job_title'  => ucwords($request>input('job_title')), 
           'vacancy_no' => $request->input('vacancy_no'), 
           'category_id' => $request->input('category_id'), 
           'job_type_id'  => $request->input('job_type_id'), 
           'city_id'   => $request->input('city_id'), 
           'travel_required' => $request->input('travel_required'), 
           'other_locations' => ucwords($request->input('other_locations')), 
           'no_vacancy'  => $request->input('no_vacancy'), 
           'job_salary'  => $request->input('job_salary'), 
           'date_expiry'  => $request->input('date_expiry'), 
           'job_details'  => $request->input('job_details'), 
           'date_posted'  => date('Y-m-d'), 
           'qualification_required' => $request->input('qualification_required'), 
           'experience_required' => $request->input('experience_required'), 
           'skills_required'  => $request->input('skills_required'), 
           'apply_guidance'   => $request->input('apply_guidance'), 
           'duty_responsibilities' => $request->input('duty_responsibilities') 
          ]; 

    General_model::createrecord($company_details_data,'job_details'); 
} 

C'est le createRecord() dans mon modèle:

public static function createrecord($data,$tbl) 
    {  
     return DB::table($tbl)->insert($data); 
    } 

Je veux utiliser htmlspecialchars ici, mais je me sers d'un éditeur de texte riche en ma forme. Si j'utilise htmlspecialchars, cela changera aussi les balises non nuisibles comme, < p>, < br>, etc. S'il vous plaît aider

+0

Qu'est-ce que la méthode 'createRecord()' faire? On dirait que vous essayez de reproduire une bonne partie de ce qu'Eloquent va faire pour vous. Je vous suggère de consulter la [Documentation éloquente] (https://laravel.com/docs/5.4/queries) – jfadich

+0

c'est la fonction createrecord: return DB :: table ($ tbl) -> insert ($ data); –

+0

Vous devez utiliser Eloquent et créer un modèle pour chaque table. Ensuite, lorsque vous utilisez la méthode 'create', vous utiliserez des requêtes paramétrées pour vous protéger contre l'injection SQL. – jfadich

Répondre

1

Sans être en mesure de voir les méthodes sur votre modèle qui prennent ces données et effectivement les pousser dans la DB c'est difficile à dire.

Idéalement, vous souhaitez désinfecter vos données avant de les transmettre à n'importe quelle classe. Aussi, vous voudriez vous assurer que vos modèles, s'ils n'utilisent pas déjà un ORM existant, utilisent quelque chose comme PDO pour vos interactions avec la base de données.

Reportez-vous aux réponses à la question suivante concernant la désinfection réelle d'une demande de BD. Comme d'autres l'ont souligné, il est probablement plus judicieux d'utiliser un ORM comme Eloquent dans Laravel qui gère beaucoup de cela pour vous.

What's the best method for sanitizing user input with PHP?

+0

J'ai éditer la question. La méthode modèle actuelle fait ceci: return DB :: table ($ tbl) -> insert ($ data); –