Regulární výraz - povolený název souboru

Ladik

Regulární výraz - povolený název souboru
« kdy: 08. 12. 2012, 14:35:53 »
Ahoj,
v PHP bych potřeboval regulární výraz pro ověření platného názvu souboru při uložení na server (nesmí začínat tečkou a končit .php nebo .phtml nebo .php3 - případně můžete rozšířit o další "nebezpečné" přípony).

Prozatím to mám takto "@^[^\.][a-zA-Z0-9\-\.]+$@i", ale nevím jak v jenom výrazu najednou zapsat podmínku, že nesmí končit určitými řetězci. Děkuji za odpověď.


Kit

Re:Regulární výraz - povolený název souboru
« Odpověď #1 kdy: 08. 12. 2012, 16:39:36 »
Pojmenuj si ukládaný soubor syntetickým názvem (např MD5 obsahu) a skutečný název dej do databáze s odkazem na soubor.

McFly

  • *****
  • 613
    • Zobrazit profil
    • E-mail
Re:Regulární výraz - povolený název souboru
« Odpověď #2 kdy: 08. 12. 2012, 17:20:43 »
A adresáři, kam nahráváš soubory, nastav třeba přes .htaccess
Kód: [Vybrat]
php_flag engine off

Ladik

Re:Regulární výraz - povolený název souboru
« Odpověď #3 kdy: 08. 12. 2012, 17:29:51 »
Pojmenuj si ukládaný soubor syntetickým názvem (např MD5 obsahu) a skutečný název dej do databáze s odkazem na soubor.

Při každém přístupu k souboru by se ale muselo z DB načíst, co je to za soubor a to by zbytečně zatežovalo server - když si např. představím, že to bude nějaká fotogalerie a kvůli každému obrázku sahat extra do DB by nebylo vhodné. Lepší je jednou ošetřit při uložení než pokaždé při načtení. Přinejhorším si mohu napsat funkci, která bude zakázané přípony testovat, ale všechny vstupní parametry testuji pomocí reg. výrazů, tak jsem to chtěl mít jednotné.

Ladik

Re:Regulární výraz - povolený název souboru
« Odpověď #4 kdy: 08. 12. 2012, 17:33:50 »
A adresáři, kam nahráváš soubory, nastav třeba přes .htaccess
Kód: [Vybrat]
php_flag engine off

Ano, to je ideální a lokálně mi to funguje, na serveru je možnost php_flag engine off zakázaná, resp. se PHP soubory zpracují jako obvykle.


Kit

Re:Regulární výraz - povolený název souboru
« Odpověď #5 kdy: 08. 12. 2012, 18:54:25 »
A adresáři, kam nahráváš soubory, nastav třeba přes .htaccess
Kód: [Vybrat]
php_flag engine off
To bude zajímavé, až mu tam někdo nahraje svůj .htaccess :-)

Ladik

Re:Regulární výraz - povolený název souboru
« Odpověď #6 kdy: 08. 12. 2012, 19:10:28 »
A adresáři, kam nahráváš soubory, nastav třeba přes .htaccess
Kód: [Vybrat]
php_flag engine off
To bude zajímavé, až mu tam někdo nahraje svůj .htaccess :-)

Nenahraje - viz. jak jsem psal v původním dotazu "nesmí začínat tečkou".

RDa

  • *****
  • 2 913
    • Zobrazit profil
    • E-mail
Re:Regulární výraz - povolený název souboru
« Odpověď #7 kdy: 08. 12. 2012, 20:13:23 »
Lepsi je testovat na povolene nazvy, treba pro zminovanou galerii: ^.*[.](jpg|jpeg|gif|png)$ a s tim pak nemusis resit zda to zacina teckou nebo nebo to ma nebezpecnou priponu..



pepak

Re:Regulární výraz - povolený název souboru
« Odpověď #8 kdy: 08. 12. 2012, 22:32:31 »
Ahoj,
v PHP bych potřeboval regulární výraz pro ověření platného názvu souboru při uložení na server (nesmí začínat tečkou a končit .php nebo .phtml nebo .php3 - případně můžete rozšířit o další "nebezpečné" přípony).
Neřeším, jak moc je to rozumný přístup - já bych třeba určitě šel cestou whitelistu, ne blacklistu. Ale můžeš to napsat takhle (navíc jsem ti přidal podmínku, že nesmí obsahovat tečku za lomítkem, protože jinak ti "nezačíná tečkou" nijak zvlášť nepomůže):

~^(?!\.)[^/]+(?:/(?!\.)[^/]+)*(?<!\.php)(?<!\.phtml)(?<!\.php3)$~i

Ladik

Re:Regulární výraz - povolený název souboru
« Odpověď #9 kdy: 09. 12. 2012, 17:29:32 »
Ahoj,
v PHP bych potřeboval regulární výraz pro ověření platného názvu souboru při uložení na server (nesmí začínat tečkou a končit .php nebo .phtml nebo .php3 - případně můžete rozšířit o další "nebezpečné" přípony).
Neřeším, jak moc je to rozumný přístup - já bych třeba určitě šel cestou whitelistu, ne blacklistu. Ale můžeš to napsat takhle (navíc jsem ti přidal podmínku, že nesmí obsahovat tečku za lomítkem, protože jinak ti "nezačíná tečkou" nijak zvlášť nepomůže):

~^(?!\.)[^/]+(?:/(?!\.)[^/]+)*(?<!\.php)(?<!\.phtml)(?<!\.php3)$~i

Děkuji moc, před touto regulární kontrolou probíhá převod názvu souboru na znaky v rozmezí a-z0-9 a jiné povolené znaky jsou už jen pomlčka a tečka a cokoli jiného se převádí na pomlčku. Nedokáži určit, jaké soubory se budou nahrávat (teoreticky může jít i o nějaké specifické přípony), tak proto blacklist.