我有一个脚本,可以在其中向数据库中写入一个新项目。在这个脚本中,我有一个textarea元素,name="omschrijving"。在该文本区域中,用户可以指定<li>元素,我已经用css做了样式。
问题是,当我输入:<李>你好<李>变为:<;李>你好</李>在我的数据库中。
我使用一个中等文本类型的列将文本区域的值存储在.中
我的表单代码:
<form action="nieuwproject.php?action=toevoegen" method="post">
<fieldset class=""> <!-- Set class to "column-left" or "column-right" on fieldsets to divide the form into columns -->
<p>
<label>Naam</label>
<input class="text-input medium-input datepicker" type="text" id="medium-input" name="naam" />
</p>
<p>
<label>Categorie</label>
<select name="categorie" class="text-input medium-input">
<?php $oObj->getCategorieDropdown(); ?>
</select>
</p>
<p>
<label>Opdrachtgever</label>
<input class="text-input medium-input datepicker" type="text" id="medium-input" name="opdrachtgever" />
</p>
<p>
<label>Omschrijving</label>
<textarea class="text-input textarea wysiwyg" id="textarea" name="omschrijving" cols="79" rows="15"></textarea>
</p>
<p>
<label>Werkzaamheden</label>
<textarea class="text-input textarea wysiwyg" id="textarea" name="werkzaamheden" cols="79" rows="15"></textarea>
</p>
<p>
<input class="button" type="submit" value="Submit" />
</p>
</fieldset>
<div class="clear"></div><!-- End .clear -->
</form>
我的插入脚本代码:
function addProject() {
$this->sQuery = "INSERT INTO projecten (naam,opdrachtgever,omschrijving,werkzaamheden,categorie)
VALUES ('" . $_POST['naam'] . "','" . $_POST['opdrachtgever'] . "','" . $_POST['omschrijving'] . "','" . $_POST['werkzaamheden'] . "','" . $_POST['categorie'] . "')";
$this->rResult = mysql_query($this->sQuery);
}
有人知道怎么解决这个问题吗?我知道这个脚本对黑客来说是糖果,所以没有必要指出这一点。
谨致问候,
Michael
当然
只需在代码中找到对数据库的数据执行htmlspecialchars/htmlentities
的位置,然后将其删除
我可以向您保证,数据库永远不会根据自己的意愿添加任何符号
更改/添加到数据中的每个符号都是一些PHP代码的结果。
请注意,您的查询格式不正确
您必须格式化它,要么单独格式化每个文本,要么使用准备好的语句
它与li>
问题无关,但与应用程序错误和漏洞
http://php.net/manual/en/function.htmlentities.phphttp://www.php.net/manual/en/function.htmlspecialchars.php
据我所知,MySQL不会像这样净化你的html,所以你的代码中有一些东西通过htmlentities()
或htmlspecialchars()
传递你的$_POST['omschrijving']
。这两个函数中的任何一个都会产生您在数据库中看到的输出。
编辑:
刚刚看到你的评论说这是你的所见即所得编辑器。抢手货