在从数据库输出(MySQL)时使用htmlspeciachars,还需要考虑什么来防止XSS?
当从数据库(在本例中为MySQL)中提取数据时,在输出中使用htmlspecialchars会阻止XSS,这是正确的吗?在这种情况下,HTML将显示在HTML文档中吗?你还有什么需要考虑的吗?我的意思是,在哪些其他情况下,您可能容易受到XSS的攻击?
假设我有一个webiste,我在其中创建了一个登录系统,供用户发布新帖子,在这里用户可以删除这些新闻帖子,但这里使用了一个带有alertbox()的JavaScript函数来确保用户确实想删除这条新闻,如果是,新闻ID将通过URL按链接传递,如下所示:
echo '<a class="btn-small btn-danger" onclick="deleteNews('. htmlspecialchars($newsidfk) .')" ">Delete news</a>'; Javascript函数:
//alert deleteNews
function deleteNews($newsidfk)
{
var ans = window.confirm(Are you sure you want to delete this news post?');
if (ans == true)
{
window.location.href="delete.php?news_id_fk="+$newsidfk;
}
}有没有什么我应该考虑的东西来防止XSS,或者这里不能做XSS?假设我有一个字符串而不是一个数字,我应该做一些JavaScript编码,也许是encodeURI()函数?
使用您阻止的that特殊字符来运行例如script-tag、link-tag和img-tag是正确的吗?这就是XSS的工作方式,因为例如,有人可以窃取用户的私人信息?
我了解到,在显示来自数据库的输出时应该始终进行清理,但是存储到数据库中的输入又如何呢?您是否也应该对此进行清理,或者使用PDO准备好的语句或其他东西以及如何做到这一点就足够了?
我在维基上读到了这篇关于超文本标记语言清理的文章:http://en.wikipedia.org/wiki/HTML_sanitization
发布于 2013-01-07 06:25:28
始终将JavaScript文字输出为JSON。
<a class="btn-small btn-danger" onclick="deleteNews(<?php echo htmlspecialchars(json_encode($newsidfk)); ?>)" ">Delete news</a>
<script>
var data = <?php echo json_encode($data); ?>
</script>发布于 2013-01-07 07:19:21
当从数据库(在本例中为MySQL)中提取数据时,在输出中使用htmlspecialchars会阻止
,这是正确的吗?在这种情况下,HTML将显示在HTML文档中吗?你还有什么需要考虑的吗?我的意思是,在哪些其他情况下,您可能容易受到XSS的攻击?
是的,这在某种程度上是正确的。在整个故事中,有时被忽视的一部分是字符编码。虽然这在默认情况下工作得很好,但如果你没有检查你在通过htmlspecialchars放入的数据上使用的编码是否也被通知给了函数本身,这可能是有问题的。
例如,如果你使用PHP5.3,并且你的数据库中有UTF-8编码的字符串,并且你这样查询它们,并且你在你的超文本标记语言中使用了UTF-8,那么你也应该告诉htmlspecialchars
$flags = ENT_COMPAT | ENT_HTML401;
$encoding = 'UTF-8'
htmlspecialchars($string, $flags, $encoding);尽管您使用的是PHP 5.4,但UTF-8是默认编码,因此您不需要提供它:
htmlspecialchars($string);https://stackoverflow.com/questions/14187326
复制相似问题