从我所看到的一切来看,似乎在用户输入的内容上逃避html的惯例(为了防止XSS)是在渲染内容时这样做.大多数模板语言似乎默认都是这样做的,而且我遇到过像stackoverflow这样的问题,认为这个逻辑是表示层的工作.
所以我的问题是,为什么会这样呢?对我而言,在输入(即表单或模型验证)上逃避似乎更清晰,因此您可以假设数据库中的任何内容都可以安全地显示在页面上,原因如下:
多种输出格式 - 对于现代Web应用程序,您可能使用服务器端html呈现,使用ajax/JSON的javascript web应用程序和接收JSON的移动应用程序(可能有也可能没有某些webview,这可能是javascript应用程序或服务器呈现的HTML).所以你必须处理遍布各地的html.但是输入将始终在保存到db之前被实例化为模型(并经过验证),并且您的模型都可以从相同的基类继承.
您已经必须小心输入以防止代码注入攻击(授予这通常是抽象到ORM或db游标,但仍然),所以为什么不担心html转义到这里所以你不必担心任何事情安全相关的输出?
我很想听听关于为什么html在页面渲染上转义是首选的论点
我获取$ _POST信息并将其存储在数据库中,稍后查询并将此信息打印给用户.我应该在插入此信息之前使用htmlspecialchars(),还是在输出之前查询它?
此外,我需要用户能够使用引号和其他日常特殊字符的能力.我知道我可以使用ENT_NOQUOTES标志,但感觉就像我这样做会留下安全漏洞.
我的网站允许Bbcode,我希望用户能够使用日常字符,而不必看到"amp; lt;<?>&".
鼓励我<--- noob!感谢:D