0

preg_match在一个函数中使用防止图像扩展被提交!现在我也想屏蔽“ ~ ”字符!谁能告诉我我该怎么做?

function is_valid($url) {
    $res = 1;
    if (isset($url['path'])) {
        if (preg_match('/\b.jpg\b/i', $url['path'])) { $res = 0; }
        if (preg_match('/\b.gif\b/i', $url['path'])) { $res = 0; }
        if (preg_match('/\b.png\b/i', $url['path'])) { $res = 0; }
        if (preg_match('/\b.bmp\b/i', $url['path'])) { $res = 0; }
    }
    return $res;
}

我试过这个,但它不起作用:

if (strpos('~', $url['path'])) {
    $res = 0;
}
4

1 回答 1

0

首先,你真的应该阅读一些关于正则表达式的东西!如果您这样做了,请阅读phps手册strpos

你可以试试preg_match('/[^~]+\.(png|jpg|gif|bmp)/i', $url['path']),或者如果你想坚持你的版本,

if (strpos($url['path'], '~') !== FALSE) {
    $res = 0;
}

但无论如何,你的支票不会很安全。示例:有人将 php 文件重命名为 png 并上传,如果您在 apache 上激活了 mime_magic,则代码将被执行。因此,检查文件的 mimetype 会更安全。请参阅如何使用 php 找到文件的 mime 类型?举个例子。那里接受的答案提到了一个(现在)已弃用的函数,但如果你有 PHP 5.3+ ,你可以使用http://de3.php.net/manual/en/function.finfo-file.php

于 2013-07-19T15:56:39.993 回答