0

我们的网页上有和上传功能,我们有一个过滤器数据库,您可以添加不允许用户上传的内容。

在上传方面,我们有一个 mysql 查询,如果名称在过滤器数据库中持续存在,则假设该查询会阻止上传。

我们现在的查询是:

$DB->query("SELECT id FROM filter WHERE filter LIKE '%". $Properties['Title'] ."%'");

if($DB->record_count() != 0) {
    $Err = '[b]Cannot upload this![/b]';
    include(SERVER_ROOT . '/sections/upload/upload.php');
    die();
}

现在的问题是如果我们阻止:My.Dog.In.The.Ocean.My.HomeVid.mp4 那么它也会阻止:My.Dog.In.The.Garden.Avi

如果过滤器字符串存在于名称 EXCATLY 中,我们只需要阻止查询。

关于改变什么以使其正确阻塞的任何想法?

*注意:$DB->record_count = 覆盖 mysqli_num_rows 的函数

因为,我们得到 $Properties 是上传元素的属性,因此 Title 是字符串标题

4

1 回答 1

0

LIKE 不应该与您所说的方式相匹配:

mysql> select 'My.Dog.In.The.Ocean.My.HomeVid.mp4' like '%My.Dog.In.The.Garden.Avi%';
+------------------------------------------------------------------------+
| 'My.Dog.In.The.Ocean.My.HomeVid.mp4' like '%My.Dog.In.The.Garden.Avi%' |
+------------------------------------------------------------------------+
|                                                                      0 |
+------------------------------------------------------------------------+
1 row in set (0.04 sec)

因此,您可能遇到了其他问题,例如 $Properties['Title'] 未设置为您认为的那样。除非您在其他地方清理文件标题,否则这里也存在 SQL 注入漏洞。有人上传一个名为的文件'; DROP TABLE filter#会破坏你的数据库。

于 2013-08-17T18:32:51.877 回答