我有一个页面,管理员输入他们自己的自定义查询,只是为了额外的安全措施,我想禁止使用除" SELECT"以外的任何查询。查询。
我如何检查查询是SELECT还是DELETE / UPDATE / INSERT ...,包括检测SELECT INTO等技巧。
我使用Laravel框架,它具有
功能DB::select($query);
但不幸的是,它不会检查它是否是一个选择语句或其他内容。
答案 0 :(得分:2)
我认为最安全的是使用一个特殊的数据库用户,并以某种方式设置用户,他只能做SELECT而不修改数据库,如果这也是你的选择,它会更安全。
答案 1 :(得分:2)
以下是关于如何检测SQL语句是否确实是SELECT语句的建议(请注意,使用了PHP 7的类型提示):
function isSelect(string $stmt): bool {
// Default trim()'s mask plus left parentheses
$_TRIM_MASK_WITH_PAREN = "( \t\n\r\0\x0B";
return 'SELECT' === strtoupper(
substr(
ltrim($stmt, $_TRIM_MASK_WITH_PAREN), 0, 6
)
);
}
希望它有所帮助。
答案 2 :(得分:0)
试试这个:
if (stripos($query, "select") !== false && stripos($query, "from") !== false) {
DB::select($query);
}
答案 3 :(得分:0)
不是正确的方法,但这会做的伎俩:
<?php
$qry="SELECT * FROM table";
$qry_array=explode(" ",$qry);
echo "Type of query :".$qry_array[0]; //SELECT, INSERT, UPDATE or DELETE