如何防止Laravel 5.4

时间:2017-08-01 22:09:38

标签: php laravel laravel-5 pdo sql-injection

我正在使用Laravel 5.4。我有一个表单,我从用户那里获取一些输入。表单变量直接插入数据库。我想确保确保不输入任何可能损害数据库的内容。我听说过SQL Injection,但我对它并不了解。

这是我的功能。

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');
}

这是我模型中的createrecord()函数:

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

我想在这里使用htmlspecialchars,但我在我的表单中使用了一个丰富的texteditor。如果我使用htmlspecialchars,它也会改变无瑕疵的标签,如< p>,< br>等。请帮忙

1 个答案:

答案 0 :(得分:1)

无法在模型上看到采用这些数据并实际将它们推入数据库的方法,这很难说清楚。

理想情况下,您需要在将数据交给任何课程之前对其进行清理。此外,您还需要确保您的模型(如果尚未使用现有ORM)使用类似于PDO的数据库进行数据库交互。

请参阅以下问题的答案,了解对数据库实际需要进行的消毒处理。

编辑: 正如其他人所指出的那样,在这里使用像lalovel中的Eloquent这样的ORM更有意义,可以为你处理很多这样的事情。

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