我正在制作一个简单的界面,允许用户修改存储在Microsoft SQL数据库中的CSS和HTML片段。该接口使用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实际上知道库(而不是谷歌参数绑定为它,就像我做了xD),并推荐一个更好的替代:) – Matchu 2010-07-22 22:01:40
我从来没有碰过ADODB在我的生活中,我GOOGLE参数绑定方法为好。我实际上更喜欢你的解决方案,因为我并不真正需要做一个单独的准备。交叉+1。 ;) – Charles 2010-07-22 22:04:27
我假设ADODB是自动转义的东西,无论用于构建语句的方法如何。这是*魔术!*(tm)。谢谢你让我平静下来;我正在使用绑定并将其切换到PDO。 – James 2010-07-23 14:59:47