Archive mars 2009
Tous les articles archivés pour le mois et l'année demandée.
Comment connaitre le type d'un fichier sur UNIX* ?
Lorsque vous exécutez la commande native Unix "file nom_fichier", elle renvoie des informations sur le fichier spécifié. En effet, le type MIME d'un fichier uploadé est fourni par le client web, ce qui constitue un trou de sécurité facile à contourner pour un pirate.
Voici le code qu’il faut utiliser :
<?
if(is_uploaded_file($userfile))
{
if(!ereg("text",exec(escapeshellcmd("file $userfile"))))
{
unlink($userfile);
echo "Désolé, seuls les fichiers texte sont autorisés !";
} else
{
move_uploaded_file($userfile, "/upload");
}
?>
Protéger une page en ASP
Nous allons vous montrer comment on peut protéger une page en demandant un identifiant et un mot de passe avant d’autoriser l’accès à la page.Voici le script html à utiliser :
<html>
<head>
<title>Identification</title>
</head>
<body>
<br>
<p align=”center”><font size=4><strong>Veuillez entrer votre identifiant et votre mot de passe : </strong></font></p>
<br><br>
<form method=”POST” action=”script_9b.asp”>
<div align=”center”><center><p>Identifiant : <input type=”text”
name=”Identifiant” size=”20”></p>
</center></div><div align=”center”><center><p>Mot de passe : <input type=”text” name=”Passe” size=”20”> </p>
</center></div><div align=”center”><center><p><input type=”submit”
Value= ”Envoyer” name=”B1”></p>
</center></div>
</form>
</body>
</html>
Voici le listing ASP
<%Identification = Request.Form(“Identification”)
Passe = Request.Form(“passe“)
If Identification <> “net“ AND passe <> “linea“ Then
Response.Redirect “script_9a.html“
End If
%>
<html>
<head>
<title>Page protégée</title>
</head>
<body>
<br><br>
<p align=”center”><strong>Le contenu de cette page est protégé par un mot de passe.</strong></p>
</body>
</html>
Dépannage du serveur DNS en utilisant Logging
Lorsque vous installez Windows Server 2003 DNS, DNS tous les événements sont automatiquement enregistrés dans le journal des événements DNS. Le journal des événements DNS contient des erreurs et d'autres manifestations importantes enregistrées par le serveur DNS. Vous pouvez afficher le contenu du journal des événements DNS en utilisant l'Observateur d'événements, ou en utilisant la console de gestion DNS. Dans la console DNS, le journal peut être consulté à partir de l'Observateur d'événements dans le noeud de l'arborescence de la console. Vous pouvez utiliser la console DNS pour modifier cette configuration par défaut.Pour l'enregistrement de débogage, un autre fichier journal appelé le journal de débogage DNS (Dns.log) est mis à jour par le service Serveur DNS. L'enregistrement de débogage fonction est désactivé par défaut. Lorsqu'il est activé, l'enregistrement de débogage peut écrire tous les paquets qui sont envoyés au serveur DNS dans la Dns.log. Le Dns.log est situé dans le WINDOWS \ System32 \ Dns \ dossier.
Lancer le WebMail sans le 32000 dans l'URL
Pour commencer, vous devez changer les Ports par défaut de Merak de 32000 en 80 et de 32001 en 443 (SSL).Voici comment vous devez procéder :
Ouvrez la console d'administration et allez dans Système -> Services, double-cliquez sur le service web/Control et modifiez les ports

GROUP_CONCAT et son utilisation
GROUP_CONCAT est une fonction d'agrégation (comme COUNT, MAX, etc.) permettant de concaténer tous les enregistrements des groupes définis par la clause GROUP BY.En d'autres termes, GROUP_CONCAT est à CONCAT ce que SUM est à l'opérateur +.
Exemple :
CREATE TABLE groupe utilisateur (
ID_GROUPE INT AUTO_INCREMENT NOT NULL,
LIBELLE_GROUPE VARCHAR(50),
PRIMARY KEY (ID_GROUPE)
);
CREATE TABLE utilisateur (
ID_USER INT AUTO_INCREMENT NOT NULL,
NOM_USER VARCHAR(50) NOT NULL,
ID_GROUPE INT NOT NULL,
PRIMARY KEY (ID_USER),
FOREIGN KEY (ID_GROUPE) REFERENCES groupe_utilisateur (ID_GROUPE)
);
INSERT INTO groupe_utilisateur (LIBELLE_GROUPE) VALUES
('utilisateurs'), ('administrateurs');
INSERT INTO utilisateur (NOM_USER, ID_GROUPE) VALUES
('bob', 1), ('toto', 1), ('bibi', 1), ('superuser', 2), ('directeur', 2);
Utilisation de la fonction GROUP_CONCAT (avec ses deux options SEPARATOR et ORDER BY) :
SELECT LIBELLE_GROUPE, GROUP_CONCAT(NOM_USER SEPARATOR ":" ORDER BY NOM_USER) AS LIST_USERS
FROM utilisateur
INNER JOIN groupe_utilisateur USING (ID_GROUPE)
GROUP BY (utilisateur.ID_GROUPE)
Comment convertir une chaine en majuscule ou minuscule
Il vous suffit d’utiliser les fonctions srttolower() et strtoupper().Voice un exemple avec le code suivant:
<?php
$chaine="MiXeD CaSe";
$echo strtolower($chaine);
$echo strtoupper($chaine);
?>
Le système de cache de MySQL
Il y a généralement une question que l’on se pose lorsqu’on étudie MySQL. Le principe de fonctionnement du cache MySQL et son utilisation.Commençons par noter que le cache de MySQL est un endroit mémoire qu'utilise MySQL pour stocker de côté les résultats de certaines requêtes SQL. Ainsi, si une requête mise en cache est redemandée au serveur, celui-ci n'aura pas besoin d'aller interroger les tables et pourra renvoyer le résultat directement depuis le cache. Ceci permet d’obtenir un gain de vitesse très élevé.
Comment l'activer ?
Normalement, le cache est activé par défaut. Nous devons tout simplement vérifier s’il est déjà activé en tapant ceci :
SHOW VARIABLES LIKE 'have_query_cache';
Si la réponse est "YES", ça veut dire que le système de cache est disponible. Mais cela ne veut pas dire qu'il soit actif, nuance ! Pour savoir son état, interroger la variable 'query_cache_size' :
SHOW VARIABLES LIKE 'query_cache_size'
Détecter la sortie de survol
Il est facile de gérer le survol de souris car c’est un événement Windows (WM_MOUSEMOVE pour les experts).
Il n’existe pas d‘événement “sortie de survol” au niveau de Windows.
Par contre cet événement existe dans WinDev.
Voici le code qui permet d’intervenir lorsque la souris quitte chaque champ d’une fenêtre :
WM_USER est un entier = 1024
Evénement("FinSurvol", ".*", WM_USER+711)
...
PROCEDURE FinSurvol()
//Procédure callback appellée par Evénement()
Trace("Fin du survol du champ "+_EVE.nom)
Tri d'un tableau bi-dimensionnel
Voici le code permettant de trier un tableau comportant plusieurs colonnes en fonction d'une autre que la première.<?php
// Initialisation d'un tableau de 2 colonnes
$tab[0]=array('mot'=> 'exemple', 'traduction' => 'example');
$tab[1]=array('mot'=> 'chien', 'traduction' => 'dog');
$tab[2]=array('mot'=> 'chat', 'traduction' => 'cat');
// Tri du tableau en fonction de la colonne traduction
asort($tab['traduction']);
// Copie dans un tableau nouveau tableau
// afin d'obtenir un tableau avec des index propres
$final=array();
$i=0;
foreach($tab['traduction'] as $cle => $valeur) {
$final['mot'][$i]=$tab['mot'][$cle];
$final['traduction'][$i]=$tab['traduction'][$cle];
$i++;
}
?>
Voila votre tableau trié en fonction de la seconde colonne. Attention toutefois, le tri est case-sensitive. Ce qui peut conduire à des résultats surprenants.
Configuration MultiHoming sous Windows
Pour mettre en place un système utilisant le MultiHoming sous Windows :1. Sélectionnez successivement les commandes suivantes :
• Windows NT : Menu Démarrer > Paramètres > Panneau de configuration > icône Réseau > onglet Protocoles > Protocole TCP/IP > bouton Propriétés > bouton Avancé...
• Windows 2000 : Menu Démarrer > Paramètres > Connexions réseau et accès à distance > Connexion au réseau local > Bouton Propriétés > Protocole Internet (TCP/IP) > Bouton Propriétés > Bouton Avancé...
• Windows XP : Menu Démarrer > Panneau de configuration > Connexions réseau et Internet > Connexions réseau > Connexion au réseau local (Propriétés) > Protocole Internet (TCP/IP) > Bouton Propriétés > Bouton Avancé...
La boîte de dialogue de configuration "Paramètres TCP/IP avancés" s'affiche.
2. Cliquez sur le bouton Ajouter... dans la zone "Adresses IP" et ajoutez les adresses IP supplémentaires.
Vous pouvez définir jusqu'à 5 adresses IP différentes. Pour cette opération, vous aurez peut être besoin de l'assistance d'un administrateur réseau.