Использование сырых методов в приложении laravel кажется безопасным - PullRequest
0 голосов
/ 31 декабря 2018

Я знаю, что использование сырых методов не является хорошей практикой в ​​larabel, но в некоторых случаях мне нужно их использовать.Итак, в моем laravel 5.7 я определил следующие области:

1)

public function scopeGetByCreatedAt($query, $filter_voted_at_from= null, string $sign= null)
{
    if (!empty($filter_voted_at_from)) {
        if (!empty($sign)) {
            $query->whereRaw(with(new VoteItemUsersResult)->getTableName().'.created_at ' . $sign . "'".$filter_voted_at_from."' ");
        } else {
            $query->where(with(new VoteItemUsersResult)->getTableName().'.created_at', $filter_voted_at_from);
        }
    }
    return $query;
}

Этот метод используется в форме отчета, где знак $ задается как строковый литерал '>'и filter_voted_at_from - вход для выбора даты, например

$detailedVoteItemUsersResults = VoteItemUsersResult
::getByCreatedAt($filter_voted_at_from, ' > ')

Я имею в виду, что ни одно из этих полей не может иметь опасного значения, например, «удалить пользователей таблицы»;.

2) когда мне нужно сделать выборку по нескольким полям

public function scopeGetByName($query, $name = null)
{
    if ( ! isset($name)) {
        return $query;
    }
    return    $query->whereRaw(' ( ' . ContactUs::myStrLower('author_email', false, false) . ' like ' . ContactUs::myStrLower($name, true,
            true) . ' OR ' . ContactUs::myStrLower('author_name', false, false) . ' like ' . ContactUs::myStrLower($name, true, true) . ' ) ');
}

...

public static function myStrLower($value, $with_single_quote, $with_percent) : string
{
    $percent= $with_percent ? '%' : '';
    if ( $with_single_quote ) {
        $ret = "LOWER('" . $percent . $value . $percent . "')";
    } else {
        $ret= "LOWER(" . $percent . $value . $percent . ")";
    }
    return $ret;

}

Использование этой области видимости $ name - это ввод текста, поэтомуесли пользователь вводит текст, например «Проф; удалить пользователей таблицы»;У меня есть следующий sql deguging:

   SELECT * 
    FROM `contact_us` 
    WHERE  ( LOWER(author_email) like LOWER('%Prof;drop table users;%')     OR LOWER(author_name) like LOWER('%Prof;drop table users;%') )  
    ORDER BY `created_at` asc 

Итак, я полагаю, что никаких проблем не возникнет?

В любом случае, я бы предпочел избегать использования необработанных методов.а) Возможно ли в приведенных выше примерах избежать использования необработанных методов?
б) Если нет, безопасны ли они?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...