recherches récentes:
incluez les fonctions ,
fonctions variables ,
fonctions de poteau...
Si vous êtes nouveau au PHP ou devez juste régénérer vos qualifications, c'est l'endroit à commencer. Cette série de cours d'instruction te donnera la connaissance de base que vous devrez créer un simple Site Web de PHP.
Le PHP est un langage de programmation r3fléchissant à l'origine conçu pour produire les pages Web dynamiques. [1] Le PHP est employé principalement dans le serveur-côté scripting, mais peut être employé d'une ligne de commande interface ou dans des applications graphiques autonomes. Des interfaces utilisateurs textuelles peuvent également être créées utilisant des ncurses.
(PHP 4 >= 4.3.0, PHP 5, PECL mysql:1.0)
mysql_real_escape_string — Protège les caractères spéciaux d'une commande SQL
mysql_real_escape_string() protège les caractères spéciaux de la chaîne unescaped_string , en prenant en compte le jeu de caractères courant de la connexion link_identifier . Le résultat peut être utilisé sans problème avec la fonction mysql_query(). Si des données binaires doivent être insérées, cette fonction doit être utilisée.
mysql_real_escape_string() appelle la fonction mysql_escape_string() de la bibliothèque MySQL qui ajoute un slash aux caractères suivants : NULL, \x00, \n, \r, \, ', " et \x1a.
Cette fonction doit toujours (avec quelques exceptions) être utilisée pour protéger vos données avant d'envoyer la requête à MySQL.
La chaîne à échapper.
La connexion MySQL. S'il n'est pas spécifié, la dernière connexion ouverte avec la fonction mysql_connect() sera utilisée. Si une telle connexion n'est pas trouvée, la fonction tentera d'ouvrir une connexion, comme si la fonction mysql_connect() avait été appelée sans argument. Si aucune connexion n'est trouvée ou établie, une alerte E_WARNING est générée.
Retourne la chaîne échappée, ou FALSE si une erreur survient.
Exemple #1 Exemple simple avec mysql_real_escape_string()
<?php
// Connexion
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());
// Requête
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
?>
Exemple #2 Un exemple d'attaque par injection SQL
<?php
// Demande à la base de vérifier si un utilisateur correspond
$query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'";
mysql_query($query);
// Nous ne vérifions pas $_POST['password'], il peut contenir ce que l'utilisateur veut ! Par exemple :
$_POST['username'] = 'aidan';
$_POST['password'] = "' OR ''='";
// Cela signifie que la requête envoyée à MySQL sera :
echo $query;
?>
La requête envoyée à MySQL :
SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''
Cela permet à n'importe qui de s'identifier sans mot de passe valide.
Exemple #3 Meilleure pratique
L'utilisation de la fonction mysql_real_escape_string() sur chaque variable évite les injections SQL. Cet exemple démontre la méthode la plus propre pour envoyer une requête à la base, indépendamment de votre configuration des guillemets magiques.
<?php
if (isset($_POST['product_name']) && isset($_POST['product_description']) && isset($_POST['user_id'])) {
// Connect
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password');
if(!is_resource($link)) {
echo "Échec de la connexion au serveur\n";
// ... historisation de l'erreur
} else {
// Annule les effets magic_quotes_gpc/magic_quotes_sybase sur ces variables si ON.
if(get_magic_quotes_gpc()) {
$product_name = stripslashes($_POST['product_name']);
$product_description = stripslashes($_POST['product_description']);
} else {
$product_name = $_POST['product_name'];
$product_description = $_POST['product_description'];
}
// Faire une requête sécurisée
$query = sprintf("INSERT INTO products (`name`, `description`, `user_id`) VALUES ('%s', '%s', %d)",
mysql_real_escape_string($product_name, $link),
mysql_real_escape_string($product_description, $link),
$_POST['user_id']);
mysql_query($query, $link);
if (mysql_affected_rows($link) > 0) {
echo "Produit inséré\n";
}
}
} else {
echo "Remplissez le formulaire proprement\n";
}
?>
La requête s'exécute maintenant correctement et les attaques par injection SQL ne fonctionnent plus.
Note: Une connexion MySQL est nécessaire avant d'utiliser la fonction mysql_real_escape_string(), sinon, une erreur de niveau E_WARNING sera générée, et FALSE sera retourné. Si link_identifier n'est pas défini, la dernière connexion MySQL est utilisée.
Note: Si magic_quotes_gpc est activée, appliquez d'abord la fonction stripslashes() à vos données. Utiliser cette fonction sur des données qui ont déjà été protégées, les protègera une deuxième fois.
Note: Si cette fonction n'est pas utilisée pour protéger vos données, la requête sera vulnérable aux attaques par injection SQL.
Note: mysql_real_escape_string() n'échappe ni %, ni _. Ce sont des jokers en MySQL si combinés avec LIKE, GRANT, ou REVOKE.
Des autres fonctions utiles :
ref.pdo-mysql | ref.pdo-mysql.connection | ref.mysqli | ref.mysql | mysqli.warning-count | mysqli.use-result | mysqli.thread-safe | mysqli.thread-id | mysqli.store-result | mysqli.stmt-init | mysqli.stat | mysqli.ssl-set | mysqli.sqlstate | mysqli.setup | mysqli.set-local-infile-handler | mysqli.set-local-infile-default | mysqli.set-charset | mysqli.select-db | mysqli.rollback | mysqli.resources | mysqli.real-query | mysqli.real-escape-string | mysqli.real-connect | mysqli.query | mysqli.prepare | mysqli.ping | mysqli.options | mysqli.next-result | mysqli.multi-query | mysqli.more-results | mysqli.kill | mysqli.installation | mysqli.insert-id | mysqli.init | mysqli.info | mysqli.get-warnings | mysqli.get-server-version | mysqli.get-server-info | mysqli.get-proto-info | mysqli.get-host-info | mysqli.get-client-version | mysqli.get-client-info | mysqli.get-charset | mysqli.field-count | mysqli.error | mysqli.errno | mysqli.dump-debug-info | mysqli.debug | mysqli.constants | mysqli.connect | mysqli.connect-error | mysqli.connect-errno | mysqli.configuration | mysqli.commit | mysqli.close | mysqli.character-set-name | mysqli.change-user | mysqli.autocommit | mysqli.affected-rows | mysqli-stmt.store-result | mysqli-stmt.sqlstate | mysqli-stmt.send-long-data | mysqli-stmt.result-metadata | mysqli-stmt.reset | mysqli-stmt.prepare | mysqli-stmt.param-count | mysqli-stmt.num-rows | mysqli-stmt.insert-id | mysqli-stmt.get-warnings | mysqli-stmt.free-result | mysqli-stmt.field-count | mysqli-stmt.fetch | mysqli-stmt.execute | mysqli-stmt.error | mysqli-stmt.errno | mysqli-stmt.data-seek | mysqli-stmt.close | mysqli-stmt.bind-result | mysqli-stmt.bind-param | mysqli-stmt.attr-set | mysqli-stmt.attr-get | mysqli-stmt.affected-rows | mysqli-result.num-rows | mysqli-result.lengths | mysqli-result.free | mysqli-result.field-seek | mysqli-result.field-count | mysqli-result.fetch-row | mysqli-result.fetch-object | mysqli-result.fetch-fields | mysqli-result.fetch-field | mysqli-result.fetch-field-direct | mysqli-result.fetch-assoc | mysqli-result.fetch-array | mysqli-result.data-seek | mysqli-result.current-field | mysqli-driver.embedded-server-start | mysqli-driver.embedded-server-end | mysql.setup | mysql.resources | mysql.installation | mysql.examples | mysql.constants | mysql.configuration | intro.mysqli | intro.mysql | function.mysqli-slave-query | function.mysqli-set-opt | function.mysqli-send-query | function.mysqli-send-long-data | function.mysqli-rpl-query-type | function.mysqli-rpl-probe | function.mysqli-rpl-parse-enabled | function.mysqli-report | function.mysqli-param-count | function.mysqli-master-query | function.mysqli-get-metadata | function.mysqli-fetch | function.mysqli-execute | function.mysqli-escape-string | function.mysqli-enable-rpl-parse | function.mysqli-enable-reads-from-master | function.mysqli-disable-rpl-parse | function.mysqli-disable-reads-from-master | function.mysqli-client-encoding | function.mysqli-bind-result | function.mysqli-bind-param | function.mysql-unbuffered-query | function.mysql-thread-id | function.mysql-tablename | function.mysql-stat | function.mysql-set-charset | function.mysql-select-db | function.mysql-result | function.mysql-real-escape-string | function.mysql-query | function.mysql-ping | function.mysql-pconnect | function.mysql-num-rows | function.mysql-num-fields | function.mysql-list-tables | function.mysql-list-processes | function.mysql-list-fields | function.mysql-list-dbs | function.mysql-insert-id | function.mysql-info | function.mysql-get-server-info | function.mysql-get-proto-info | function.mysql-get-host-info | function.mysql-get-client-info | function.mysql-free-result | function.mysql-field-type | function.mysql-field-table | function.mysql-field-seek | function.mysql-field-name | function.mysql-field-len | function.mysql-field-flags | function.mysql-fetch-row | function.mysql-fetch-object | function.mysql-fetch-lengths | function.mysql-fetch-field | function.mysql-fetch-assoc | function.mysql-fetch-array | function.mysql-escape-string | function.mysql-error | function.mysql-errno | function.mysql-drop-db | function.mysql-db-query | function.mysql-db-name | function.mysql-data-seek | function.mysql-create-db | function.mysql-connect | function.mysql-close | function.mysql-client-encoding | function.mysql-change-user | function.mysql-affected-rows | class.mysqli | class.mysqli-stmt | class.mysqli-result | class.mysqli-driver | book.mysqli | book.mysql |
Le PHP est une langue scripting d'usage universel employée couramment qui approprié particulièrement au développement de Web et peut être enfoncée dans le HTML. Si vous êtes nouveau au PHP et voulez avoir une certaine idée de la façon dont cela fonctionne, essayez le cours d'instruction d'introduction. Après ce, vérifiez le manuel en ligne, et l'exemple archivez les emplacements et certaines des autres ressources disponibles dans la section de liens.