最近看一篇关于web安全的文章 有一句话没明白

大脑袋
  • 8

说 任何内容输出到页面之前都必须加以en-code,避免不小心把htmltag显示出来
任何内容 意思是说不仅仅是用户可以控制的变量吗?
之前的理解是为防止sql注入或xss 所有用户输入的变量输出到html或javascript时都要做过滤 这个任何输出如何理解?
有高手给解答一下吗?

回复
阅读 488
5 个回答

啥叫“用户可以控制的变量”?

你指的是单纯的 UGC 内容?

可一个动态站点里不一定所有内容都是用户在客户端前台提交才产生的啊,你的后台管理系统或是 API 接口能百分百确保防 XSS 了吗?

这里说的应该是,对于用户输入的内容,输出到页面的时候要做 htmlencode. 比如:用户输入了

<input type="button" />

输出到HTML时 应该转成

&lt;input type=&quot;button&quot; /&gt;

不然的话,可能会直接在页面上 显示了一个按钮,而不是文本本身。

做web安全,一定要坚持的一点:不相信任何用户输入的任何内容。

该encode就encode,该敏感字符过滤就过滤。防止xss最有效的做法。就是任何用户内容输出时候 加上htmlspecialencode 去解决。

en-code是为了防止用户输入一些xxs脚本,比如<script>window.location.href="https://www.baidu.com"</script>,如果你不做任何处理,你打开网页就直接跳到百度去了

肯定不是任何内容都要过滤啊。

只有用户输入的内容才必须过滤,因为其中可能会有开发者预期外的内容,导致预期外的效果。
其他要输出的内容都是开发者定义的内容,原样输出就是符合开发者预期的。

比如业务需要开发者在不同的情况下在这里输出不同的html内容,在那里输出不同的js代码,还过滤个啥,功能还要不要实现了。

你知道吗?

宣传栏