Question

J'utilise normalement cette fonction pour aseptiser mes entrées de forme avant de les stocker dans ma base de données:

//Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
    $str = @trim($str);
    if(get_magic_quotes_gpc()) {
        $str = stripslashes($str);
    }
    return mysql_real_escape_string($str);
}

Jusqu'à aujourd'hui, je ne savais pas que mysql_real_escape_string requiert une connexion de base de données que je ne l'ai utilisé quand j'ai le nettoyage des données avant de les stocker dans la base de données.

J'ai essayé d'utiliser la fonction sur un formulaire de contact et a obtenu le « Un lien vers le serveur n'a pas pu être établie » erreur. Je pouvais connecter à la base de données, mais il n'y a pas besoin parce que je suis simplement en train de désinfecter les données avant qu'il ne soit envoyé à mon e-mail via le formulaire de contact.

Quelle est la meilleure façon de données Désinfectez qui n'est pas stockées dans une base de données MySQL et ces données ne doivent encore être aseptisé?

Était-ce utile?

La solution

utilisation filter_var()

http://php.net/manual/en/function.filter -var.php

comme si vous voulez aseptiser un email:

$_POST['email'] =    filter_var($_POST['email'], FILTER_SANITIZE_EMAIL); 

au message

$_POST['message'] = filter_var($_POST['message'], FILTER_SANITIZE_STRING);

est-enogth

Autres conseils

Le but de désinfecter les données avec mysql_real_escape_string est d'éviter l'injection SQL. Si vous ne l'utilisez SQL, vous êtes déjà immunisé.

Les hommes ne reçoivent pas le cancer du col utérin.

Utilisez une fonction appropriée aux aseptisation des caractères spéciaux que vous devez éviter. Idéalement, ne pas enlever quelque chose qui ne nuiront pas.

Le concept est erroné. Cette fonction ne permet pas non pour le courrier électronique même pas pour la base de données.

mysql_real_escape_string ne rien de "aseptiser". Il est simplement échapper délimiteurs et rien d'autre. Juste pour éviter les erreurs de syntaxe si vous avez un délimiteur dans vos données:

SELECT * FROM table WHERE name = 'it's me' # error!

après que les données sont échappés, vos données deviennent 'it\'s me' et il n'y a pas d'erreur.
Par conséquent, cette fonction fonctionne uniquement avec SQL requête et pour les données, entre guillemets seulement .

Ainsi, il n'y a aucun sens à faire juste mysql_real_escape_string sans guillemets. mysql_real_escape_string doit être utilisé
a) seul. des trucs comme garniture ou stripslashes n'a rien à voir ici
b) juste avant la chaîne de requête composant et non ailleurs
c) uniquement avec des données qui vont être entre guillemets.
d) toutes les autres données ont besoin d'une autre façon de sanitization

En ce qui concerne l'e-mail, vous ne pas besoin de sanitization il l'envoyer en texte brut. La seule précaution que vous devez prendre est contre injection mail Pas un gros problème cependant. Il suffit de mettre l'entrée d'utilisateur dans seulement le corps du message. pas en sujet, ou de tout autre ou en-tête. Corps du message uniquement. Et vous êtes en sécurité

(Je suis nouveau à stackoverflow donc je vais sur ce dans le mauvais sens / faire un mauvais travail avec le style de ma réponse Ne hésitez pas à me le faire savoir.)

moi si je me trompe car je suis aussi traiter de la même question en ce moment, mais je ne pense pas que la réponse acceptée à l'aide filter_var est assez que les attaquants pourraient contourner cela en utilisant unicode.

Exemple: "& # 66; & # 99; & # 99; & # 58;" (Espaces ajoutés afin stackoverflow affiche correctement)

Cela ne supprimeront pas de la chaîne, et sera plus tard remplacé par « Cci: ».

Ceci est ma solution, mais il peut y avoir une façon meilleure. Si quelqu'un connaît un j'aimerais entendre.

    $string = str_replace("&", "(and)", $string);
    $string = str_replace("#", "(num)", $string);
    $string = str_replace(";", "(semi-colon)", $string);
    $string = str_replace(":", "(colon)", $string);
    $string = str_replace("@", "(at)", $string);
    $string = str_replace("\\", "(backslash)", $string);
    $string = filter_var($string, FILTER_SANITIZE_STRING);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top