Я делаю простой интерфейс, который позволит пользователю изменять фрагменты CSS и HTML, которые хранятся в базе данных Microsoft SQL. Этот интерфейс использует PHP5 и ADOdb.
По какой-то причине эта форма отклонит любой ввод, содержащий одну или несколько одинарных кавычек. Эта строка, например, недопустима: "background-image: url ('paper.gif');"
Я подозреваю, что ADOdb может активно фильтровать одинарные кавычки, чтобы предотвратить атаки SQL-инъекций. Есть ли способ избежать пользовательского ввода в PHP, чтобы позволить сохранить символ одинарной кавычки?
Я рассмотрел автоматическое преобразование всех одинарных кавычек в двойные, но похоже, что это может нарушить разметку пользователя.
Возможно, это не очень полезно, но вот пример теста, который я использую:
<!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>