首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP搜索页面代码

PHP搜索页面代码
EN

Code Review用户
提问于 2019-02-04 16:01:27
回答 1查看 84关注 0票数 1

希望向您展示我为处理搜索请求而编写的部分代码。用户根据产品的文章(代码)提交搜索。目标是允许用户以任何可能的方式将他的搜索请求写入textarea元素:行、列或用任何分隔符(逗号、空格、分号等)分隔。

代码语言:javascript
复制
 $value) { // Processing our array
            $codes_list .= $value . "|"; // Adding values and separator to previously created variable to use it in MySQL query
        }

        $codes_list = rtrim($codes_list, "|"); // Removing last separator from string
        $codes_add = " AND `code` REGEXP '^({$codes_list})我的朋友说它包含SQL注入的漏洞,因为我没有过滤用户的输入。但我的逻辑是基于一条语句,即用户的输入过滤器在preg_match_all行中。我确信数组中只包含由6位数组成的元素。无论如何,我希望有PHP和漏洞经验的人看一看这段代码,并分享他对使用它的潜在风险的看法。谢谢。"; // Creating new variable with part of MySQL query and our elements from the array
    } else {
        $codes_add = ""; // Creating empty variable if our array was empty
    }
}

$query = "SELECT * FROM `table` WHERE `status` = '0'" . $codes_add; // Generating MySQL query string
$result = mysqli_query($link, $query); // Making a request to MySQL
?>

我的朋友说它包含SQL注入的漏洞,因为我没有过滤用户的输入。但我的逻辑是基于一条语句,即用户的输入过滤器在preg_match_all行中。我确信数组中只包含由6位数组成的元素。

无论如何,我希望有PHP和漏洞经验的人看一看这段代码,并分享他对使用它的潜在风险的看法。谢谢。

EN

回答 1

Code Review用户

发布于 2019-02-04 16:33:53

和我一样,我是准备好的语句的拥护者,我在这里找不到SQL注入的任何方法,所以您的代码应该是安全的。

我只能按照通常的例程来减少此代码的膨胀:

代码语言:javascript
复制
$query = "SELECT * FROM `table` WHERE `status` = '0' ";

if(!empty($_POST['codes'])) {
    preg_match_all("/\d{6}/", $_POST['codes'], $codes_array);
    $codes_array = array_unique($codes_array[0]);
    $codes_list = implode(",", $codes_array);
    $codes_add = $codes_list ? " AND `code` IN ($codes_list)" : "";
    $query .= $codes_add;
}
$result = mysqli_query($link, $query);

基本上,PHP已经有了一个函数,可以将数组值粘合在一起,称为内爆(),根据我对SQL的理解,我决定将REGEXP更改为IN。如果我错了,那么您可以简单地将其更改为regexp。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/212856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档