在数据库(MySQL)的输出上使用 htmlspeciachars,还有什么要考虑的来防止 XSS?
从数据库(在本例中为 MySQL)获取数据时在输出上使用 htmlspecialchars 是否正确,可以防止 XSS?在这种情况下,要在 HTML 文档中显示 HTML?还有什么你应该考虑的吗?我的意思是在哪些其他情况下你可能容易受到 XSS 攻击?
假设我有一个网站,我在其中创建了一个登录系统,供用户发布新帖子,用户可以在这里删除这些新闻帖子,但这里使用了一个 JavaScript 函数和 alertbox() 来确保用户真的想删除这条新闻,如果是,则新闻 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() 函数吗?
使用 htmlspecialchars 阻止例如脚本标签、链接标签和 img 标签运行是否正确?这就是 XSS 的工作方式,因为有人可以,例如,窃取用户的私人信息?
我了解到在显示数据库输出时应该始终进行清理,但是存储到数据库中的输入呢?您是否也应该对此进行清理,还是仅使用 PDO 准备好的语句或其他东西就足够了,以及如何这样做?
我在 wiki 上的这篇文章中阅读了有关 HTML 清理的内容: http ://en.wikipedia.org/wiki/HTML_sanitization