Je crée une interface simple qui permettra à un utilisateur de modifier des éléments CSS et HTML stockés dans une base de données Microsoft SQL. Cette interface utilise PHP5 et ADOdb.Empêcher une base de données de rejeter une entrée utilisateur
Pour quelque raison, ce formulaire rejettera toute entrée qui contient un ou plusieurs guillemets simples. Cette chaîne, par exemple, n'est pas autorisée: "background-image: url ('paper.gif');"
Je soupçonne ADOdb de filtrer agressivement les guillemets simples pour empêcher les attaques par injection SQL. Existe-t-il un moyen d'échapper l'entrée de l'utilisateur dans PHP pour permettre au caractère guillemet simple d'être stocké?
J'ai considéré la conversion automatique de tous les guillemets simples en guillemets doubles, mais il semble que cela a le potentiel de casser le balisage de l'utilisateur.
Il est sans doute pas très utile, mais voici un exemple du test que je utilise:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Cp1252">
<title>Edit website</title>
</head>
<body>
<h1>CSS Test</h1>
<?php
include_once ('database.php');
$table = "[User Site]";
if (!isset($_REQUEST['dbname'])) {
return false;
} else {
$dbname = $_REQUEST['dbname'];
$db = Database::singleton($dbname);
//Push any new CSS to the database
if (isset($_POST['css'])) {
$css = $_POST['css'];
$sql = "UPDATE " . $table .
" SET html='" . $html . "', css='" . $css . "' " .
" WHERE dbnameId='" . $dbname . "'";
$db->Execute($sql);
}
//Fetch any CSS from the database
$sql = "SELECT * FROM " . $table . " WHERE dbnameId='" . $dbname . "'";
$data = recordToArray($db->Execute($sql));
echo "<p>";
$css = $data[0]['css'];
}
$rows = 20;
$cols = 80;
?>
<!-- Show the user a form -->
<form action="test.php" method="post">
CSS:<br> <textarea rows="<?php echo $rows ?>" cols="<?php echo $cols ?>" name="css"><?php echo $css ?></textarea><p>
<input type="hidden" name="dbname" value="<?php echo $dbname ?>" />
<input type="submit" value="Update CSS" />
</form>
</p>
</body></html>
+1 pour connaître réellement la librairie (au lieu de googler le paramétrage comme pour xD) et recommander une meilleure alternative :) – Matchu
Je n'ai jamais touché ADODB dans ma vie, j'ai recherché la méthode de liaison des paramètres bien. En fait, je préférerais votre solution, car je ne me soucie pas vraiment d'avoir à faire une préparation séparée. Croix a attribué la mention +1. ;) – Charles
Je supposais que ADODB échappait aux choses automatiquement quelle que soit la méthode utilisée pour construire l'instruction. C'est * magic! * (Tm). Merci de m'avoir corrigé; J'utilise la liaison et le passage à PDO maintenant. – James