在PHP中使用exec模糊图像


Using exec to blur image in PHP

我刚开始使用exec,目前正在使用它来创建上传到网站的图像的模糊版本。

我的代码是这样的:

exec("convert '$image' -blur 0x8 'blur_' . $image");

但是我想知道使用这种方法是否会有安全问题?如果有的话,要有预防的方法。

用户可以上传png、jpeg和gif格式的图片,但可以随意命名。

所以,正如marcb已经指出的那样,它允许用户直接在命令行上输入。您应该在名称中只允许一小部分字符,或者干脆自己命名它们。一个递增计数器或当前时间戳之类的,然后从数据库中关联到它。

如果数据库和其他东西有点太多了,那么至少做以下操作;只允许"a-z0-9_-.a-z"。这可以通过像这样匹配一个正则表达式来实现:

if (!preg_match('/^[a-z_0-9-]+'.[a-z]+$/i',$filename)) die('Invalid filename.. Keep it simple.')

是的,如果允许用户随意命名文件,可能存在漏洞。您可以尝试在将文件名传递给exec之前对其进行转义,但更安全的方法是在上传后重新命名文件。例如,您可以确保所有文件只包含数字或字母。