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 devrait lire cette consultation pour éviter les problèmes de protection les plus courants.

Cependant, il est nécessaire de souligner l'importance de la protection complète du serveur (pas seulement un serveur MySQL ) contre tous les types d'attaques utilisées. Dans cet article, malheureusement, il n'est pas possible de couvrir tous les aspects des problèmes de sécurité, mais les problèmes les plus importants sont considérés complètement.

MySQL utilise une sécurité basée sur les listes de contrôle d'accès ( ACL ) pour toutes les connexions, demandes et autres opérations qu'un utilisateur peut tenter d'exécuter. Il existe également un certain support pour les connexions chiffré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 démarré, essayez de suivre ces recommandations:

Ne donnez à personne l'accès (sauf pour l'administrateur MySQL ) à la table USER dans la base de données MySQL . Le mot de passe crypté est le vrai mot de passe 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.

Étudiez le système de privilèges d'accès MySQL . Les commandes GRANT et REVOKE sont utilisées pour 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 du réseau. Commandes de liste de contrôle

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 faisant attention aux options de configuration du mot de passe.

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

Ne stockez pas les mots de passe en tant que texte brut dans votre base de données. Lorsque votre ordinateur est piraté, un intrus peut obtenir la liste complète

mots de passe et les utiliser. Au lieu de cela, utilisez l'algorithme MD5 ou tout autre basé sur une fonction de hachage à sens unique.

Ne choisissez pas les mots de passe des dictionnaires. Il existe des programmes spéciaux pour les sélectionner. Même les mots de passe comme "xfish98" sont très mauvais. Beaucoup mieux est le "duag98", qui contient le même mot "poisson", mais est imprimé sur une touche à gauche sur le clavier.Une autre méthode consiste à utiliser des mots de passe tels que "UIBBR", qui se compose des premiers mots de la phrase il y avait un grand enfant. »De tels mots de passe sont faciles à retenir et à imprimer, mais il est difficile de trouver un attaquant.

Utilisez le pare-feu. Il vous protégera contre au moins 50% des vulnérabilités exploitées dans n'importe quel logiciel. MySQL utilise le port par défaut de 3306. Ce port doit ê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 depuis une machine distante, où server_host est le nom d'hôte de votre serveur MySQL: telnet server_host 3306

Ne faites pas confiance aux données saisies par les utilisateurs. Ils peuvent tromper votre code en entrant des caractères spéciaux dans le formulaire Web ou l'URL. Assurez-vous que votre application reste sécurisée si l'utilisateur tape quelque chose comme: DROP DATABASE mysql; Ceci est un exemple critique, mais de nombreuses fuites de sécurité et perte de données peuvent survenir en raison de pirates utilisant des méthodes similaires. Aussi, n'oubliez pas de vérifier les données numériques. Une erreur courante consiste à protéger uniquement les lignes. Parfois, les gens pensent que si la base de données ne contient que des données publiques, elle ne devrait pas être protégée. C'est faux. À tout le moins, une attaque DoS 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 est d'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. Nous vérifions:

Toutes les applications Web:

1. Une tentative d'entrer ' ' '' ' ' dans vos formulaires Web. Si vous obtenez une erreur MySQL, examinez immédiatement ce problème.

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

3. Essayez de modifier les types de données dans les URL dynamiques à partir des caractères numériques aux caractères donnés dans les exemples précédents. Votre application devrait être sûre contre cette attaque et les attaques similaires.

4. Essayez d'entrer des caractères, des espaces et des caractères spéciaux au lieu de chiffres dans les champs numériques. Votre application doit les supprimer avant qu'ils ne soient acceptés par MySQL, sinon votre application devrait émettre une erreur.

5. Vérifiez la taille des données avant d'accepter leur MySQL.

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

Utilisateurs de PHP:

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

Utilisateurs de l'API MySQL C:

Vérifiez la requête API mysql_escape_string ().

Utilisateurs de MySQL ++:

Vérifiez les transitions et les citations du modificateur dans les threads de la requête.

Utilisateurs de Perl DBI:

Vérifiez la méthode quote () ou utilisez les espaces réservés.

Utilisateurs Java JDBC:

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

N'envoyez pas de données non cryptées sur Internet. Ces données sont disponibles pour quiconque a le temps et la capacité de les intercepter et de les utiliser à ses propres fins. Au lieu de cela, utilisez un protocole crypté tel que SSL ou SSH. MySQL supporte la version SSL interne 3.23.9. SSH peut être utilisé pour créer des tunnels cryptés.

Apprenez à utiliser tcpdump. Dans la plupart des cas, vous pouvez vérifier si les flux de données MySQL ne sont pas cryptés en utilisant la commande suivante:

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


Parfois, pour protéger le script contre le piratage d'un site, vous devez faire attention non à des vulnérabilités spécifiques (mais, bien sûr, vous devez les corriger), mais protéger le site dans son ensemble (en fait, prévenir les vulnérabilités avant qu'elles ne soient trouvées). Dans cet article, je vais vous dire ce que vous devez faire périodiquement sur votre site afin de le protéger contre le piratage.

Si vous utilisez un script disponible en téléchargement gratuit, surveillez bugtracker et mettez à jour périodiquement. Les nouvelles versions corrigent souvent de sérieuses vulnérabilités trouvées dans les versions précédentes.

En outre, si vous spécifiez sur votre site le script que vous utilisez, supprimez le numéro de version de cette information. Si le pirate ne sait pas quelle version vous avez, il ne peut pas utiliser la vulnérabilité dans la version du script que vous avez. Mais, encore une fois, seulement "peut", de sorte que toujours être mis à jour.

Maintenant, regardons les erreurs qui peuvent être dans votre script self-made.

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

Si les détails de l'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 un fichier contenant votre identifiant et votre mot de passe dans la barre d'adresse du navigateur!

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

En corrigeant l'erreur précédente, vous corrigez en même temps celle-ci - parfois le login et le mot de passe sont stockés dans des fichiers facilement trouvables par Yandex ou Google! Si vous ne corrigez pas cette erreur, vous risquez que le pirate ne piratage même pas votre site, mais trouve simplement une victime via le moteur de recherche et piraté le premier webmaster raté! Ne te montre pas à eux!

En passant, vous pouvez bloquer l'accès aux moteurs de recherche via robots.txt. L'accès complètement fermé au site ne devrait pas être (et d'où viendront les visiteurs?), Mais seulement pour les répertoires que le visiteur ne devrait pas voir, et donc le robot de recherche.

3. Le mot de passe est stocké sous une forme non cryptée

Le mot de passe doit être stocké sous forme cryptée. Le type le plus préférable est le hachage (les algorithmes MD5 ou SHA1 peuvent être utilisés), car il est impossible d'obtenir directement un mot de passe du hachage. Mais il existe des bases de données de hachages en ligne dans lesquelles le mot de passe peut être stocké et votre hash, utilisez donc des mots de passe et des mots de passe non ordinaires à partir d'un ensemble aléatoire de caractères.

Pour plus de confiance dans la fiabilité de la protection de votre site, lisez les articles de piratage qui sont disponibles gratuitement sur les ressources de piratage, et essayez d'appliquer les méthodes décrites ici, comme ils disent, «sur vous-même».