Ceci est une mauvaise regex.
^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF)$
Faisons-le partie par partie.
([a-zA-Z]:)
Cela nécessite le chemin du fichier commence par un driveletter comme C:
, d:
, etc.
(\\{2}\w+)\$?)
\\{2}
signifie que la barre oblique inverse répétée deux fois (notez les \
a besoin d'être échappées), suivi de quelques caractères alphanumériques (\w+
), et peut-être un signe dollar (\$?
). C'est la partie hôte du chemin UNC. Le |
signifie "ou". Donc soit commence par une lettre de lecteur ou un chemin UNC. Félicitations pour avoir chassé les utilisateurs non-Windows.
(\\(\w[\w].*))
Cela devrait la partie répertoire du chemin, mais est en fait 2 caractères alphanumériques suivis de quoi que ce soit, sauf nouvelles lignes (.*
), comme \[email protected]#*(#$*)
.
Le regex approprié pour cette partie devrait être (?:\\\w+)+
(.jpg|.JPG|.gif|.GIF)$
Cela signifie que les 3 derniers caractères du chemin doit être jpg
, JPG
, gif
ou GIF
. Notez que .
est pas un point, mais correspond à tout sauf \n
, donc un nom de fichier comme haha.abcgif
ou malicious.exe\0gif
passera.
Le regex approprié pour cette partie devrait être \.(?:jpg|JPG|gif|GIF)$
Ensemble,
^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF)$
correspondront
D:\foo.jpg
\\remote$\dummy\..\C:\Windows\System32\Logo.gif
C:\Windows\System32\cmd.exe;--gif
et échouera
/home/user/pictures/myself.jpg
C:\a.jpg
C:\d\e.jpg
Le bon regex est /\.(?:jpg|gif)$/i
et vérifier si le fichier téléchargé est vraiment une image sur le côté serveur.
Vous ne savez pas pourquoi cela a été déclassé. –
parce que c'est demander aux gens de pêcher pour lui, ne pas lui apprendre à pêcher. 3 upvotes vraiment? Postez un milion "ce que ce regex signifie" des questions je suppose. –
Je suis d'accord avec Brian, c'est assez ridicule. –