首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在从数据库输出(MySQL)时使用htmlspeciachars,还需要考虑什么来防止XSS?

在从数据库输出(MySQL)时使用htmlspeciachars,还需要考虑什么来防止XSS?
EN

Stack Overflow用户
提问于 2013-01-07 06:09:24
回答 2查看 176关注 0票数 0

在从数据库输出(MySQL)时使用htmlspeciachars,还需要考虑什么来防止XSS?

当从数据库(在本例中为MySQL)中提取数据时,在输出中使用htmlspecialchars会阻止XSS,这是正确的吗?在这种情况下,HTML将显示在HTML文档中吗?你还有什么需要考虑的吗?我的意思是,在哪些其他情况下,您可能容易受到XSS的攻击?

假设我有一个webiste,我在其中创建了一个登录系统,供用户发布新帖子,在这里用户可以删除这些新闻帖子,但这里使用了一个带有alertbox()的JavaScript函数来确保用户确实想删除这条新闻,如果是,新闻ID将通过URL按链接传递,如下所示:

代码语言:javascript
复制
echo '<a class="btn-small btn-danger" onclick="deleteNews('. htmlspecialchars($newsidfk) .')" ">Delete news</a>'; 

Javascript函数:

代码语言: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

EN

回答 2

Stack Overflow用户

发布于 2013-01-07 06:25:28

始终将JavaScript文字输出为JSON。

代码语言:javascript
复制
<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>
票数 1
EN

Stack Overflow用户

发布于 2013-01-07 07:19:21

当从数据库(在本例中为MySQL)中提取数据时,在输出中使用htmlspecialchars会阻止

,这是正确的吗?在这种情况下,HTML将显示在HTML文档中吗?你还有什么需要考虑的吗?我的意思是,在哪些其他情况下,您可能容易受到XSS的攻击?

是的,这在某种程度上是正确的。在整个故事中,有时被忽视的一部分是字符编码。虽然这在默认情况下工作得很好,但如果你没有检查你在通过htmlspecialchars放入的数据上使用的编码是否也被通知给了函数本身,这可能是有问题的。

例如,如果你使用PHP5.3,并且你的数据库中有UTF-8编码的字符串,并且你这样查询它们,并且你在你的超文本标记语言中使用了UTF-8,那么你也应该告诉htmlspecialchars

代码语言:javascript
复制
$flags    = ENT_COMPAT | ENT_HTML401;
$encoding = 'UTF-8'

htmlspecialchars($string, $flags, $encoding);

尽管您使用的是PHP 5.4,但UTF-8是默认编码,因此您不需要提供它:

代码语言:javascript
复制
htmlspecialchars($string);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14187326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档