mysql“LIKE”或针对过滤字符串的EXACT

时间:2013-08-17 17:49:55

标签: mysql

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

在上传方面,我们有一个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将成为字符串标题

1 个答案:

答案 0 :(得分: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#的文件的人会破坏您的数据库。