gpt4 book ai didi

php - 是否有更动态的方法来清理 ORDER BY

转载 作者:行者123 更新时间:2023-11-29 02:27:11 25 4
gpt4 key购买 nike

我有一个来自,其中2个字段如下

<select name="sortfield">
<option value="name" selected="selected">Name</option>
<option value="price">Price</option>
<option value="id">ID Code</option>
</select>
<select name="sortdir">
<option value="asc" selected="selected">Ascending</option>
<option value="desc">Descending</option>
</select>

这是通过下一页的 $_REQUEST[] 获得的,然后将其添加到查询中以确定查询结果的排序方式,快速、肮脏、未净化的方式是这个

$query .= "ORDER BY ".$_REQUEST['sortfield']." ".$_REQUEST['sortdir'];

显然这可能是 sql 注入(inject)的问题,我可以解决这个问题的一种方法是更改​​值并在进行查询以换出值时使用 switch case,就像这样

switch($_REQUEST['sortfield'])
{
case '5524879':
$query .= "ORDER BY name";
break;
case '4587532':
$query .= "ORDER BY price";
break;
default:
$query .= "ORDER BY id";
}

虽然这有助于防止 sql 注入(inject),但它不是很动态,因为如果查询/表结构发生变化,每次都必须更改页面,我想知道是否有更动态的方法来清理字符串而不是必须使用一个 switch ... case

最佳答案

一种更动态的方法是使用 show fields 创建一个表字段数组,并在检查 sortfield

的值时将其用作白名单
if ( !in_array( $_REQUEST['sortfield'], $table_fields ) ) {
// error
}

我还建议完全不要使用 $_REQUEST。您应该知道变量的来源。

The variables in $_REQUEST are provided to the script via the GET, POST, and COOKIE input mechanisms and therefore could be modified by the remote user and cannot be trusted. The presence and order of variables listed in this array is defined according to the PHP variables_order configuration directive.

关于php - 是否有更动态的方法来清理 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19509531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com