我正在编写一个简单的类似cms的解决方案来跟踪我的愚蠢想法。 一切都很顺利,但我现在在将Xinha RTE插件应用到我的应用程序中时遇到了一些困难。
我已经按照他们的现场教程,它似乎正在工作但是......
在对文本,标题段落等进行格式化时,尽管标记在mysql数据库中正确保存:
<h1>heading</h1>
<p>text example</p>
它们显示为:
<h1>heading</h1><p>text example</p> (concatenated and NOT formatted , displaying tags in stead)
或
<p>tesy</p> <h4>fgfg<br /></h4> <h2> </h2>
最后一个示例输出是因为我做了这个改变:
//$postCon = mysql_real_escape_string($postCon);
$postCon = htmlspecialchars($postCon);
这只是因为有人在他们的论坛上说,为了逃避html特殊字符会“愚蠢” - 因为html标签是由它们组成的。
我很难指定实际问题。因此我的问题有点草率。我希望我现在所处的地方能够提供一些正确的解释或指导。
我现在要去喝咖啡并思考这个问题,如果我有新的东西,我会带来更新。 现在我将给你留下实际处理邮件的脚本。
感谢,
<?php
include_once 'bin/configDb.php';
include_once 'bin/connectDb.php';
include_once 'header.php';
//get stuff from post
$topicSub = $_POST['topic_subject'];
//$topicSub = mysql_real_escape_string($topicSub);
$topicSub = htmlspecialchars($topicSub);
$topicCat = $_POST['topicCat'];
// $topicCat = mysql_real_escape_string($topicCat);
$sesId = $_GET['username'];
//the form has been posted, so save it
//insert the topic into the topics table first, then we'll save the post into the posts table
$postCon = $_POST['post_content'];
//$postCon = mysql_real_escape_string($postCon);
$postCon = htmlspecialchars($postCon);
$sql = "INSERT INTO
topics(topic_subject, topic_date, topic_cat, topic_by)
VALUES('$topicSub', NOW(), '$topicCat', '$sesId' )";
$result = mysql_query($sql);
if(!$result)
{
//something went wrong, display the error
echo 'An error occured while inserting your data. Please try again later.' . mysql_error();
$sql = "ROLLBACK;";
$result = mysql_query($sql);
}
else
{
//the first query worked, now start the second, posts query
//retrieve the id of the freshly created topic for usage in the posts query
$topicId = mysql_insert_id();
$sql = "INSERT INTO
posts(post_content,
post_date,
post_topic,
post_by)
VALUES
('$postCon', NOW(), '$topicId', '$sesId' )";
$result = mysql_query($sql);
if(!$result)
{
//something went wrong, display the error
echo 'An error occured while inserting your post. Please try again later.' . mysql_error();
$sql = "ROLLBACK;";
$result = mysql_query($sql);
}
else
{
$sql = "COMMIT;";
$result = mysql_query($sql);
//after a lot of work, the query succeeded!
echo 'You have successfully created <a href="topic.php?id='. $topicid . '">your new topic</a>.';
header("location:admin.php");
}
}
include_once 'footer.php';
?>
答案 0 :(得分:0)
你错过了mysql_real_escape_string的目的。它可以在SQL查询中使用任意字符串数据 SAFE 。这是一种SQL注入攻击防范方法。 htmlspecialchars根本不会帮助防止SQL注入攻击。你正用一把螺丝刀钉在钉子上。它可能在某些情况下有效,但不会涵盖所有情况。而那些“未被发现”的案件将允许某人通过前门跳进来攻击你的网站。
答案 1 :(得分:0)
我发现问题出在代码的完全不同的区域。它是在代码中显示内容,愚蠢的我。那是个 ヶ辆(stripslashes()函数)
做有趣的事情。谢谢你让我把它放在那里。
Marc B,再次感谢我处理我的sql注入问题。随意按照我的方式提出更多建议。 我确实将你的最后建议付诸实践:)个人感谢你