stripslashes

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : stripslashes

Re: stripslashes

par moogli » 13 janv. 2013, 20:21

salut,


A tu vérifié la configuration php du serveur ? (dont notamment les magic_quote)

coté code :

ajoute des var_dump() dans ton code pour voir ce qui ce passe.

par exemple avant l'utilisation de la fonction de Perine et après pour contrôler ce qui ce qui se passe ;)

Même chose à la sortie de ta requête SQL

Quand tu utilise le script directement dans un navigateur tu as quoi ?

A l'insertion dans la table tu utilise et htmlentities et htmlspecialchars, hors tu ne devrais utiliser ni l'un ni l'autre ;)
Ceci afin d'avoir les données brutes en base (ce qui n'est pas gênant) et utilise la fonction que tu veux pour l'affichage (mais pas les deux c'est pas forcément utile).
Tu pourras ainsi, si tu le souhaite utiliser ces données pour faire autre chose (export sous un format quelconque autre que tu html ;) ).


@+

Re: stripslashes

par Michel6359 » 13 janv. 2013, 19:51

RE

Bon j'ai essayé la solution proposé par Perine , mais cela ne fonctionne, jai essayé avec htmlentities , rien à faire , je suis usé avec ce problème . 8-|

Code : Tout sélectionner

<?php header("content-type: application/json; charset=utf-8"); // Version avec PDO $conn = new PDO('mysql:host=localhost;dbname=***', '**', '***'); function cleanup_magic_quotes() { if (!get_magic_quotes_gpc()) { return; } array_walk_recursive($_GET, 'cleanup_magic_quotes_array'); array_walk_recursive($_POST, 'cleanup_magic_quotes_array'); array_walk_recursive($_REQUEST, 'cleanup_magic_quotes_array'); array_walk_recursive($_COOKIE, 'cleanup_magic_quotes_array'); } function cleanup_magic_quotes_array(&$value) { $value = stripslashes($value); } cleanup_magic_quotes(); $currentTimestamp = time(); $lastTimestamp = (isset($_GET['lastTimestamp'])) ? $_GET['lastTimestamp'] : ($currentTimestamp-1); if (!empty(htmlentities($_POST['pseudo'])) && !empty(htmlentities($_POST['message']))) { /* Attention jamais faire un htmlspecialchars() sur une variable avant mise en bd cela donne un gros risque de coruption de valeur $message = htmlspecialchars ($_POST['message']); $pseudo = htmlspecialchars($_POST['pseudo']); */ //mysql_query("SET NAMES UTF8"); $sth = $conn->prepare("INSERT INTO minichat(pseudo,message,timestamp) VALUES(:pseudo, :message, :timestamp)"); /* pour sécuriser une variable en pdo cette méthode est meilleur $sth->bindParam(":pseudo", $pseudo); $sth->bindParam(":message", $message); $sth->bindParam(":timestamp", $currentTimestamp); */ htmlentities($_POST['pseudo'], ENT_QUOTES, "UTF-8"); htmlentities($_POST['message'], ENT_QUOTES, "UTF-8"); //htmlentities ($_POST['message'], ENT_QUOTES); //$sth->bindValue('pseudo', (htmlentities($_POST['pseudo'])),PDO::PARAM_STR); //$sth->bindValue('message',$_POST['message'],PDO::PARAM_STR);PDO::PARAM_INT //$sth->bindValue('message',(htmlentities($_POST['message'])),PDO::PARAM_STR); $sth->bindValue('timestamp',$currentTimestamp,PDO::PARAM_INT); $sth->execute(); } /* $sth = $conn->prepare("SELECT * FROM minichat WHERE timestamp > :lastTimestamp ORDER BY id DESC LIMIT 0,10"); cette ligne ne peut pas fonctionner, car on ne mélange jamais du pdo avec du mysql c'est soit l'un soit l'autre $conn-> mysql_query("SET NAMES UTF8"); */ //$sth = $conn->query("SET NAMES UTF8"); $sth = $conn->prepare("SELECT * FROM minichat WHERE timestamp > :lastTimestamp ORDER BY id DESC LIMIT 0,10"); $sth->bindParam(":lastTimestamp", $lastTimestamp); $sth->execute(); $result_utf8 = $sth->fetchAll(PDO::FETCH_ASSOC); if(count($result_utf8) > 0) ini_set("zlib.output_compression", "On"); echo json_encode (htmlspecialchars(stripslashes($result_utf8))); ?>

Re: stripslashes

par Perine » 13 janv. 2013, 16:10

Encore mieux ! Je me répète, changer d'hébergeur ou au moins faire marcher la concurrence est la meilleure chose à faire.

D'ailleurs il y a des hébergeurs qui te permettent de t'aider pour une migration sans bavure.

Re: stripslashes

par Michel6359 » 13 janv. 2013, 13:24

Bonjour

Ok je vais essayer cette solution , mais j'attend car après avoir tenté un php.ini pour déactiver magic quotes , mon ip est bannis du site , et l'hébergeur fait le sourd pour retirer mon bannissement donc j'attend . Peut-être que mon Dimanche sera foutu pour résoudre ce problème !!!

Merci pour votre aide

Re: stripslashes

par Perine » 13 janv. 2013, 13:06

Non, car les clés des tableaux sont aussi affectées par les quotes magiques.

Re: stripslashes

par Genova » 13 janv. 2013, 12:52

J'aurai aussi utilisé un array_walk, comme ça :
function cleanup_magic_quotes() {
        if (!get_magic_quotes_gpc()) {
                return;
        }

        array_walk_recursive($_GET, 'cleanup_magic_quotes_array');
        array_walk_recursive($_POST, 'cleanup_magic_quotes_array');
        array_walk_recursive($_REQUEST, 'cleanup_magic_quotes_array');
        array_walk_recursive($_COOKIE, 'cleanup_magic_quotes_array');
}
function cleanup_magic_quotes_array(&$value) {
        $value = stripslashes($value);
}
cleanup_magic_quotes();
++

Re: stripslashes

par moogli » 13 janv. 2013, 12:30

Ce n'est pas forcément aussi simple de dire à des gens qui ont un truc qui tourne depuis dix ans qu'ils doivent mettre leur code à jour ou se barrer ailleurs (surtout de le cas des entreprises) :?

Un array_walk pourrait faire la même chose ? (P´tet plus rapidement ?)

@+

Re: stripslashes

par Perine » 13 janv. 2013, 11:26

Bonjour

Merci de ta réponse , mon hébergeur ne veut pas ou ne c'est pas le déactiver.

Ou je dois mettre ton code ?
Dans ce cas, je te conseille fortement de changer d'hébergeur.

Re: stripslashes

par xTG » 13 janv. 2013, 10:09

Ce code est à placer avant tout traitement des variables $_GET, $_POST, ect. (avant tout traitement mais qu'une seule fois dans le script ;) )

Re: stripslashes

par Michel6359 » 13 janv. 2013, 04:19

Bonjour

Merci de ta réponse , mon hébergeur ne veut pas ou ne c'est pas le déactiver.

Ou je dois mettre ton code ?

Re: stripslashes

par Perine » 13 janv. 2013, 04:13

Fais attention que ces antislashes viennent d'une extension de PHP qui devrait normalement être désactivée parce qu'elle crée une fausse sécurité : magic_quotes. Si tu pouvais demander à ton hébergeur de désactiver cette extension, ce serait la meilleure chose à faire.
Cependant, il y a beaucoup d'hébergeur mal organisés qui ne peuvent pas désactiver des extensions à volonté. Pour cela, il y a un code qui doit être appelé aussi vite que possible pour nettoyer ces variables (je ne l'ai pas sous la main directement, mais je te le note ici from scratch, j'espère que je mettrai pas d'erreur :D) :
function cleanup_magic_quotes() {
	if (!get_magic_quotes_gpc()) {
		return;
	}
	cleanup_magic_quotes_array($_GET);
	cleanup_magic_quotes_array($_POST);
	cleanup_magic_quotes_array($_REQUEST);
	cleanup_magic_quotes_array($_COOKIE);
}
function cleanup_magic_quotes_array(&$array) {
	$copy = $array;
	$array = array();
	foreach ($copy as $key => $value) {
		if (is_string($key)) {
			$key = stripslashes($key);
		}
		if (is_array($value)) {
			cleanup_magic_quotes_array($value);
			$array[$key] = $value;
		} else {
			$array[$key] = stripslashes($value);
		}
	}
}
cleanup_magic_quotes();

stripslashes

par Michel6359 » 12 janv. 2013, 22:42

Bonsoir

Je cherche a retirer les fameux \ devant les apostrophes et je galère depuis plusieurs heures , j'ai essayé tout ou presque

Côté serveur pas possible même avec un fichier .htaccess

Merci pour votre d'aide

Code : Tout sélectionner

<?php header("content-type: application/json; charset=utf-8"); // Version avec PDO $conn = new PDO('mysql:host=localhost;dbname=**', '**', '****'); $currentTimestamp = time(); $lastTimestamp = (isset($_GET['lastTimestamp'])) ? $_GET['lastTimestamp'] : ($currentTimestamp-1); if (!empty($_POST['pseudo']) && !empty($_POST['message'])) { $sth->bindParam(":pseudo", $pseudo); $sth->bindParam(":message", $message); $sth->bindParam(":timestamp", $currentTimestamp); */ $sth->bindValue('pseudo', (stripslashes($_POST['pseudo'])),PDO::PARAM_STR); //$sth->bindValue('message',$_POST['message'],PDO::PARAM_STR);PDO::PARAM_INT $sth->bindValue('message',(stripslashes($_POST['message'])),PDO::PARAM_STR); $sth->bindValue('timestamp',$currentTimestamp,PDO::PARAM_INT); $sth->execute(); } /* $sth = $conn->prepare("SELECT * FROM minichat WHERE timestamp > :lastTimestamp ORDER BY id DESC LIMIT 0,10"); cette ligne ne peut pas fonctionner, car on ne mélange jamais du pdo avec du mysql c'est soit l'un soit l'autre $conn-> mysql_query("SET NAMES UTF8"); */ //$sth = $conn->query("SET NAMES UTF8"); $sth = $conn->prepare("SELECT * FROM minichat WHERE timestamp > :lastTimestamp ORDER BY id DESC LIMIT 0,10"); $sth->bindParam(":lastTimestamp", $lastTimestamp); $sth->execute(); $result_utf8 = $sth->fetchAll(PDO::FETCH_ASSOC); if(count($result_utf8) > 0) ini_set("zlib.output_compression", "On"); echo json_encode (htmlspecialchars(stripslashes($result_utf8))); ?>