Я создаю простой интерфейс, который позволит пользователю изменять фрагменты 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>
+1 для фактического знания библиотеки (вместо привязки к параметру Googling для нее, как я сделал xD) и рекомендации лучшей альтернативы :) – Matchu
Я никогда не касался ADODB в своей жизни, я искал Google для метода привязки параметров, Что ж. Я бы предпочел ваше решение, так как мне действительно не нужно делать отдельную подготовку. Крест + 1'd. ;) – Charles
Я предположил, что ADODB автоматически исчезает, независимо от метода, используемого для построения инструкции. Это * магия! * (Tm). Спасибо, что поставил меня прямо; Теперь я использую привязку и переключение на PDO. – James