1.问题说明链接:
Laravel 安全:避免 SQL 注入 | Laravel China 社区
2.之前我想写一个when 排序的问题(发现这个框架不支持写法,我也找不到)
以前写法:
$keyword= ' and (SELECT(1)FROM(SELECT(if(1=1,SLEEP(0.3),1)))test) and '
$projectCaseWhenSql = " case when name like '%$keyword%' THEN 1 when content like '%$keyword%' THEN 2 else 3 END"; $projectModel->orderByRaw( $projectCaseWhenSql );
以上会导致查询很慢,有sql注入问题,如果用户传了一个删除表的操作就麻烦了
修复后的写法:
$projectCaseWhenSql = " case when name like concat('%',?,'%') THEN 1 when content like concat('%',?,'%') THEN 2 else 3 END"; $projectModel->orderByRaw( $projectCaseWhenSql,[$keyword,$keyword] );
原来这个框架的所有方法以 Raw结尾的都提供了第二个参数数组来定义变量,这样就不会有sql注入的问题