我们在网页上有上传功能,我们有一个过滤数据库,您可以添加不允许用户上传的内容。
在上传方面,我们有一个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将成为字符串标题
答案 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#
的文件的人会破坏您的数据库。