fonction pour désinfecter l'entrée de la base de données Mysql
Je suis en train de mettre un objectif général de la fonction d'ensemble qui permettra de vérifier les entrées d'une base de données Mysql. Jusqu'à présent c'est ce que j'ai:
function sanitize($input){
if(get_magic_quotes_qpc($input)){
$input = trim($input); //get rid of white space left and right
$input = htmlentities($input); //convert symbols to html entities
return $input;
} else {
$input = htmlentities($input); //convert symbols to html entities
$input = addslashes($input); //server doesn't add slashes, so we will add them to escape ',",\,NULL
$input = mysql_real_escape_string($input); //escapes \x00, \n, \r, \, ', " and \x1a
return $input;
}
}
Si j'ai bien compris la définition de get_magic_quotes_qpc()
. Ceci est défini par le serveur php automatiquement les caractères d'échappement au lieu d'avoir à utiliser addslashes()
.
Je n'ai utilisé addslashes()
et mysql_real_escape_string()
correctement et il n'y a rien d'autre à ajouter pour augmenter la désinfection.
Grâce
source d'informationauteur crm
Vous devez vous connecter pour publier un commentaire.
htmlentities() est inutile de faire de la sécurité des données pour SQL. Il est utilisé lors de l'écho des données de valeurs à la sortie HTML, pour éviter les failles XSS. C'est aussi un problème de sécurité important que vous devez être conscient de, mais il n'est pas lié à SQL.
addslashes() est redondante avec mysql_real_escape_string. Vous vous retrouverez avec littérale des barres obliques inverses dans vos cordes dans la base de données.
De ne pas utiliser des magic quotes. Cette fonctionnalité a été supprimée depuis de nombreuses années. Ne pas déployer du code PHP dans un environnement où les magic quotes est activé. Si elle est activée, désactivez-la. Si c'est un environnement hébergé et ils ne sont pas désactiver les magic quotes, obtenir un nouveau fournisseur d'hébergement.
Ne pas utiliser
ext/mysql
. Il ne prend pas en charge les paramètres de la requête, les transactions, ou OO utilisation.Utilisation AOPet de faire vos requêtes plus sûr en utilisant les requêtes préparées.
Pour plus de détails sur l'écriture de sécurité de SQL, de lire ma présentation SQL Injection Mythes et idées fausses.
Magic quotes sont obsolète. Éteignez-les si vous le pouvez :).
La deuxième partie
addslashes
etmysql_real_escape_String
fait à peu près le même (même) chose. Juste essayerRésultat devrait être
\\
donc, si vous utilisezvous devriez obtenir
\\
(ou'\\\\'
comme une chaîne de caractères). Utilisez uniquement desmysql_real_escape_string
(mieux) OUaddslashes
jamais les deux.Je recommande d'utiliser AOP au lieu de matières premières fonctions et manuel s'échapper.
Pourquoi voulez-vous appliquer htmlentities avant l'enregistrement des données dans la base de données? Que faire si vous voulez utiliser les données pour autre chose que d'écrire à un navigateur? Par exemple pour la recherche, le partitionnement de données, en utilisant les données dans d'autres langages de programmation, etc...
La seule chose que vous voulez vraiment de s'appliquer, mysql_real_escape_string (ou utilisez AOP), rien d'autre.
D'habitude, je préfère annuler les effets de la magie des devis entièrement, toujours. Magic quotes est juste difficile à utiliser et ne doit jamais avoir été inventé. Voici un extrait de la Manuel PHP pour inverser les magic quotes:
le pire que l'ajout de barres obliques ne pas désinfecter rienn'importe quelle fonction a été utilisée.
et il ne doit pas être utilisé dans les moyens de ce "nettoyage".
barres obliques ne sont pas "nettoyer" les données. Des barres obliques faire échapper les délimiteurs de chaînes de seulement. Ainsi, la seule nettoyage, vous pouvez parler de, de fuir et citant.
Sinon, si vous ne mettez pas de guillemets autour de "aseptisée" de la chaîne, vous n'avez pas de protection du tout.
Utilisation:
Cela permettra d'éviter de mauvaises données comme DROP TABLE 😉