防止在file_get_contents上执行javascript

时间:2017-09-04 14:44:46

标签: javascript php security nginx

有没有办法配置PHP /服务器(通过Nginx php-fpm)来阻止从php file_get_contents执行javascript?

现在,如果我允许用​​户上传嵌入了js的html文件,那么当通过file_get_contents()调用显示文件时,JS就会被执行。

我计划添加HTML过滤(即拒绝html上传),但如果我可以在输出上有第二层安全性,而不仅仅是在上传中(如果第一层未能采用帐户如此情况)。

由于

2 个答案:

答案 0 :(得分:2)

感谢jcubic提供一个链接,解释为什么他的解决方案不起作用;)

我所知道的只有两个强大的解决方案:

1)使用HTML以外的标记语言,它具有可证明的语法并且不允许嵌入式脚本(BBCode?)。这符合still requires that you validate the submission,但比HTML更简单。

2)应用不允许内联javascript的content security policy - 这将是我首选的解决方案,尤其是因为您可以指定报告网址,允许您监控浏览器上发生的事情而不是依赖在服务器上过滤。

答案 1 :(得分:-1)

您可以尝试在回显文件内容之前删除JavaScript:

echo preg_replace("%<script[^>]*>.*</script>%si", "", file_get_contents());

或者您可以在上传文件时拨打此电话,这样您就不必每次都这样做。

您可能还想删除具有javascript:协议网址的onclick和样式等事件,以删除那些使用xml解析器可能更好的事件。

以下是您可以考虑的XSS矢量攻击列表:XSS Filter Evasion Cheat Sheet