1

我有一个正在为客户工作的 cms,他想添加一个代码文本框,以便他可以逐页粘贴页面的特殊代码。因此,我需要能够为用户提供一种将 javascript 标签输入到他们正在编辑的页面中的方法。当该页面加载时,Java 代码将显示并运行。

例如,Facebook 代码 - 它将被粘贴到此代码 textarea 中并保存在 mysql 数据库中。

注意 - 该站点仍在使用 mysql_query 并且尚未转换,已告知客户但他们对更新没有兴趣,因此需要在 mysql_query 中完成示例。

 <script type="text/javascript">(function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
    fjs.parentNode.insertBefore(js, fjs);
 }(document, 'script', 'facebook-jssdk'));</script>

如何在不破坏 javascript 的情况下安全地将其保存到数据库中?

谢谢!

4

2 回答 2

1

如果您使用mysql_real_escape_string,您应该能够转义任何会干扰您查询的字符。

$jsData = $_POST['jsData'];
"Insert into yourTable (someColumn) VAlUES('" . mysql_real_escape_string($jsData) . "')";

在与@Basic 聊了一会儿之后,我将向您指出,我强烈建议您考虑切换到mysqlipdo,因为这两个类将为您提供一种更安全的方式来查询您的数据库,甚至可能更快这样做的方法。

于 2013-04-25T22:17:10.460 回答
1

不要使用mysql_real_escape_string

这是朝着正确方向迈出的一步,但并不完美。您需要使用参数化查询

例如...

$stmt = $dbh->prepare("INSERT INTO snippets (url, snippet) VALUES (:url, :snippet)");
$stmt->bindParam(':url', $url);
$stmt->bindParam(':snippet', $snippet);

// insert one row
$url = '/path/to/page';

$snippet = "<script type=\"text/javascript\">/*Your Javascript goes here*/</script>";
// OR
$snippet = $_REQUEST['Snippet'];

$stmt->execute();
于 2013-04-25T22:22:20.770 回答