umask () ne définit pas réellement les autorisations sur les fichiers ou les répertoires directement. Il restreint la valeur des autorisations de fichiers ou de répertoires via des masques. Chaque fichier et répertoire a une autorisation par défaut lorsqu'elle est créée, généralement (fichier) et 777 (répertoire). Cependant, UMask () définit les autorisations réelles en effectuant un bitwise "et" opération (et) sur ces valeurs par défaut.
Par exemple, l'autorisation par défaut 777 est calculée avec la valeur UMask pour calculer la valeur d'autorisation finale. Par exemple:
Autorisations de répertoire par défaut: 777
Valeur umask : 022
Le résultat du calcul est 755 , c'est-à-dire que les autorisations du répertoire sont rwxr-xr-x .
Dans PHP, vous pouvez définir le Mask du processus via la fonction umask () . Après le réglage, PHP sera affecté par la valeur UMask lors de la création de fichiers ou de répertoires dans la création ultérieure. En règle générale, la valeur UMask doit être définie avant la création du répertoire.
Par exemple, le code suivant définit UMask sur 0022 afin que le répertoire créé par PHP aura des autorisations de 755:
<span><span><span class="hljs-comment">// installation umask</span></span><span>
</span><span><span class="hljs-title function_ invoke__">umask</span></span><span>(</span><span><span class="hljs-number">0022</span></span><span>);
</span><span><span class="hljs-comment">// Créer un répertoire</span></span><span>
</span><span><span class="hljs-title function_ invoke__">mkdir</span></span><span>(</span><span><span class="hljs-string">'new_directory'</span></span><span>);
</span></span>
Dans l'exemple ci-dessus, la fonction MKDIR () créera un répertoire avec des autorisations de 755. Permission par défaut 777 Après moins UMask 022, l'autorisation du répertoire final est 755.
Lors de la définition des autorisations de répertoire, en particulier dans les environnements de serveur public ou partagé, des autorisations excessives peuvent entraîner des risques de sécurité. Par exemple, la définition des autorisations de répertoire sur 777 (entièrement ouverte) permettra à quiconque de lire, d'écrire et d'exécuter des contenus de répertoire, ce qui n'est pas en sécurité dans de nombreux cas. Pour éviter ce problème, il est recommandé d'utiliser au moins des autorisations conservatrices telles que 755 ou 750.
Il convient de noter que le masque d'autorisation défini par UMask () n'affecte que les fichiers ou répertoires créés par le processus actuel. umask () n'a aucun effet sur les fichiers ou les répertoires existants. Si vous devez modifier les autorisations pour créer des fichiers ou des répertoires, vous pouvez utiliser la fonction chmod () .
<span><span><span class="hljs-title function_ invoke__">chmod</span></span><span>(</span><span><span class="hljs-string">'existing_directory'</span></span><span>, </span><span><span class="hljs-number">0755</span></span><span>);
</span></span>
Dans certains environnements de configuration PHP (tels que le mode sûr de PHP activé ou Open_Basedir est défini), les autorisations de fichier et de répertoire de PHP peuvent être restreintes. Même si vous définissez des autorisations via umask () , vous pouvez être limité par ces configurations. Par conséquent, des soins spéciaux sont nécessaires lors de l'utilisation d'Umask () dans ces environnements.
Dans une application Web qui prend en charge le téléchargement de fichiers, les fichiers téléchargés nécessitent souvent des autorisations spécifiques. Utilisez umask () pour contrôler les autorisations lorsque le fichier est créé. Par exemple, lors du traitement des fichiers téléchargés par les utilisateurs, vous pouvez définir une valeur UMask appropriée pour vous assurer que les fichiers téléchargés n'ont pas trop d'autorisations:
<span><span><span class="hljs-comment">// installation umask,Assurez-vous que les autorisations de fichier ne sont pas 777</span></span><span>
</span><span><span class="hljs-title function_ invoke__">umask</span></span><span>(</span><span><span class="hljs-number">0022</span></span><span>);
</span><span><span class="hljs-comment">// Fichiers Téléchargées de processus</span></span><span>
</span><span><span class="hljs-title function_ invoke__">move_uploaded_file</span></span><span>(</span><span><span class="hljs-variable">$tmp_name</span></span><span>, </span><span><span class="hljs-variable">$destination</span></span><span>);
</span></span>
Dans les applications Web, les répertoires de cache sont généralement utilisés pour stocker des données temporaires. Pour éviter que le répertoire mis en cache d'être modifié par les utilisateurs malveillants, vous pouvez vous assurer que le répertoire a les autorisations correctes en définissant le UMask approprié.
<span><span><span class="hljs-title function_ invoke__">umask</span></span><span>(</span><span><span class="hljs-number">0027</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">mkdir</span></span><span>(</span><span><span class="hljs-string">'/path/to/cache'</span></span><span>, </span><span><span class="hljs-number">0775</span></span><span>);
</span></span>
Dans cet exemple, le répertoire de cache sera créé en tant qu'autorisation 775, seul le propriétaire du fichier et le même groupe d'utilisateurs ont lu et rédiger des autorisations, tandis que d'autres utilisateurs ne peuvent pas modifier le contenu du répertoire.