This page has been robot translated, sorry for typos if any. Original content here.

Recommandations générales de protection

Toute personne utilisant MySQL (ou tout autre serveur SQL) sur un ordinateur connecté à Internet doit lire cette consultation afin d'éviter les problèmes de sécurité courants.

Cependant, il est nécessaire de souligner l’importance de protéger complètement le serveur (pas seulement le serveur MySQL ) contre tous les types d’attaques utilisées. Malheureusement, dans cet article, il n’est pas possible de couvrir tous les aspects des problèmes de sécurité, mais les problèmes les plus importants sont examinés de manière exhaustive.

MySQL utilise une sécurité basée sur les listes de contrôle d'accès ( ACL ) pour toutes les connexions, requêtes et autres opérations qu'un utilisateur peut tenter d'effectuer. Il existe également une prise en charge des connexions cryptées SSL entre les clients et les serveurs MySQL . La plupart des concepts abordés dans cet article ne sont pas spécifiques à MySQL et peuvent être appliqués à toutes les applications.

Lorsque MySQL est en cours d'exécution, essayez de suivre ces instructions:

Ne donnez à personne l'accès (à l'exception de l'administrateur MySQL ) à la table USER de la base de données MySQL . Le mot de passe crypté est le mot de passe réel dans MySQL . Si vous connaissez le mot de passe répertorié dans la table USER pour cet utilisateur, vous pouvez facilement vous connecter en tant que cet utilisateur si vous avez accès à l'ordinateur répertorié pour ce compte.

Examinez le système de privilège d’accès MySQL . Les commandes GRANT et REVOKE permettent de contrôler l’accès à MySQL. N'accordez pas plus de privilèges que nécessaire. N'accordez jamais de privilèges à tous les ordinateurs d'un réseau. Commandes d'inspection:

1. Essayez mysql -u root . Si vous pouvez vous connecter au serveur sans demander de mot de passe, vous avez un problème. Tout le monde peut se connecter à votre serveur MySQL en tant qu'utilisateur root MySQL avec tous les privilèges. Lisez attentivement les commandes d’installation de MySQL, en prêtant attention aux options de définition du mot de passe.

2. Utilisez les commandes SHOW GRANTS et vérifiez les commandes pour voir qui a accès à qui. Supprimez les privilèges redondants à l'aide de la commande REVOKE.

Ne stockez pas les mots de passe en texte clair dans votre base de données. Lorsque votre ordinateur est piraté, l'intrus peut obtenir une liste complète.

mots de passe et les utiliser. Utilisez plutôt l'algorithme MD5 ou toute autre fonction de hachage unidirectionnelle.

Ne sélectionnez pas de mots de passe dans les dictionnaires. Il existe des programmes spéciaux pour les ramasser. Même les mots de passe comme "xfish98" sont très mauvais. Beaucoup mieux - "" duag98 ", qui contient le même mot" poisson "mais tapé une touche gauche sur le clavier. Une autre méthode consiste à utiliser des mots de passe comme" UMBR ", composé des premiers mots de la phrase" Mary il y avait un grand enfant. "De tels mots de passe sont faciles à retenir et à taper, mais il est difficile pour un attaquant de se relever.

Utilisez un pare-feu. Il vous protège contre au moins 50% des vulnérabilités exploitées dans tous les logiciels. MySQL utilise le port 3306 par défaut. Ce port devrait être accessible uniquement à partir d'ordinateurs approuvés. Le moyen le plus simple de vérifier si votre port MySQL est ouvert est d’essayer la commande suivante à partir d’une machine distante, où server_host est le nom d’hôte de votre serveur MySQL: telnet server_host 3306

Ne vous fiez pas aux données saisies par les utilisateurs. Ils peuvent tromper votre code en tapant des caractères spéciaux dans un formulaire Web ou une URL. Assurez-vous que votre application reste en sécurité si l'utilisateur entre quelque chose comme: DROP DATABASE mysql;. Il s'agit d'un exemple critique, mais de nombreuses fuites de sécurité et pertes de données peuvent survenir du fait de l'utilisation de méthodes similaires par des pirates. De plus, n'oubliez pas de vérifier les données numériques. Une erreur courante est de ne protéger que les chaînes. Parfois, les gens pensent que si une base de données ne contient que des données accessibles au public, elle ne devrait pas être protégée. C'est faux. À tout le moins, une attaque par déni de service peut être effectuée contre de telles bases de données. Le moyen le plus simple de se protéger contre ce type d'attaque consiste à utiliser des apostrophes autour des constantes numériques:

SELECT * FROM table WHERE ID = '234' . MySQL convertit automatiquement cette chaîne en nombre et supprime tous les caractères non numériques de la requête. Vérification:

Toutes les applications Web:

1. Essayez d’entrer ' ' ' ' '' 'dans vos formulaires Web. Si vous rencontrez un type d'erreur MySQL, étudiez immédiatement le problème.

2. Essayez de changer d'URL en ajoutant% 22 (' " '),% 23 ('#'),% 27 ' ' '.

3. Essayez de changer les types de données dans les URL dynamiques de caractères numériques à caractères donnés dans les exemples précédents. Votre application doit être sécurisée contre cette attaque et des attaques similaires.

4. Essayez d'entrer des caractères, des espaces et des caractères spéciaux au lieu de chiffres dans des champs numériques. Votre application doit les supprimer avant d'accepter MySQL, ou votre application devrait générer une erreur.

5. Vérifiez la taille des données avant de les accepter à MySQL.

6. Votre application doit se connecter à une base de données en utilisant un utilisateur autre que celui que vous utilisez à des fins administratives. Ne donnez pas à votre demande plus de droits que ceux dont ils ont réellement besoin.

Utilisateurs PHP:

Vérifiez la fonction addedlashes (). Après PHP 4.0.3, la fonction Mysql_escape_string () est disponible; elle est basée sur une fonction du même nom dans l'API MySQL C.

Utilisateurs de l'API MySQL C:

Vérifiez la demande d'API pour mysql_escape_string ().

Utilisateurs de MySQL ++:

Vérifiez les transitions et les citations de modificateur dans les flux de requêtes.

Utilisateurs Perl DBI:

Vérifiez la méthode quote () ou utilisez un zéro structurel (espaces réservés).

Utilisateurs JDBC Java:

Utilisez l'objet PreparedStatement et les espaces réservés.

Ne transmettez pas de données non chiffrées sur Internet. Ces données sont disponibles pour quiconque a le temps et la capacité de les intercepter et de les utiliser à leurs propres fins. À la place, utilisez un protocole chiffré tel que SSL ou SSH. MySQL prend en charge la version 3.23.9 de SSL interne. SSH peut être utilisé pour créer des tunnels chiffrés.

Apprenez à utiliser tcpdump. Dans la plupart des cas, vous pouvez vérifier si les flux de données MySQL sont non chiffrés à l'aide de la commande suivante:

shell> tcpdump -l -i eth0 -w - port src ou dst 3306 | des cordes


Parfois, pour protéger le script contre le piratage du site, vous devez faire attention non pas à des vulnérabilités spécifiques (mais bien sûr, vous devez les corriger), mais pour protéger le site dans son ensemble (en fait, prévenez les vulnérabilités avant de les trouver). Dans cet article, je vais vous dire ce que vous devez faire périodiquement sur votre site pour le protéger du piratage.

Si vous utilisez un script disponible en téléchargement gratuit, faites attention à bugtracker et mettez-le à jour périodiquement. Les versions plus récentes corrigent souvent des vulnérabilités graves trouvées dans les versions précédentes.

De même, si votre site Web indique le script que vous utilisez, supprimez le numéro de version de cette information. Si le pirate informatique ne sait pas quelle version vous avez, il ne peut pas utiliser la vulnérabilité dans la version du script que vous avez. Mais, je répète, seulement «peut», de sorte que vous devez toujours être mis à jour.

Passons maintenant aux erreurs qui peuvent se trouver dans votre script créé par vous-même.

1. Le mot de passe est stocké dans un fichier qui peut être téléchargé par un pirate informatique.

Si les détails d'accès sont contenus dans le fichier, il est nécessaire de le protéger du téléchargement. Vérifiez si vous pouvez ouvrir le fichier contenant le nom d'utilisateur et le mot de passe via la barre d'adresse du navigateur!

2. Le mot de passe est stocké dans un fichier indexé par les moteurs de recherche.

Après avoir corrigé l'erreur précédente, vous corrigerez également celle-ci en même temps. Parfois, l'identifiant et le mot de passe sont stockés dans des fichiers facilement lisibles par Yandex ou Google! Sans corriger cette erreur, vous risquez que le pirate informatique ne pirate même pas spécifiquement votre site Web, mais trouve simplement la victime via un moteur de recherche et pirate le premier maître Web infructueux! Ne sois pas eux!

Au fait, vous pouvez fermer l'accès aux moteurs de recherche via le fichier robots.txt. L'accès complètement fermé au site ne devrait pas (et ensuite d'où viendront les visiteurs?), Mais ne devrait concerner que les annuaires que le visiteur ne devrait pas voir et, par conséquent, le robot de recherche.

3. Le mot de passe est stocké non chiffré.

Le mot de passe doit être stocké sous forme cryptée. Le type préféré est le hachage (les algorithmes MD5 ou SHA1 peuvent être utilisés), car il est impossible d'obtenir directement un mot de passe à partir du hachage. Mais il existe des bases de hachage en ligne dans lesquelles le mot de passe peut être stocké dans votre hachage. Utilisez donc des mots de passe extraordinaires et des mots de passe choisis au hasard dans un jeu de caractères.

Pour plus de confiance dans la protection de votre site, lisez les articles sur le piratage, disponibles gratuitement sur les ressources informatiques, et essayez d'appliquer les techniques décrites ici, comme on dit, "sur soi-même".