Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否可以过滤嵌入htmlspecialchars()的视频_Php_Html_Video_Embed - Fatal编程技术网

Php 是否可以过滤嵌入htmlspecialchars()的视频

Php 是否可以过滤嵌入htmlspecialchars()的视频,php,html,video,embed,Php,Html,Video,Embed,我允许用户在他们的页面上嵌入视频,但以防我想过滤输出。为了呈现视频,我从数据库中检索了嵌入语句,但当它被过滤时,它将以原始代码呈现。有没有一种视频友好的方式来过滤类似的内容,或者有没有人对另一种方式有什么建议?提前谢谢你的建议 while ($row = $query->fetch(PDO::FETCH_ASSOC)) { $video= htmlspecialchars( $row['video'], ENT_NOQUOTES, 'UTF-8' ); } echo "$video";

我允许用户在他们的页面上嵌入视频,但以防我想过滤输出。为了呈现视频,我从数据库中检索了嵌入语句,但当它被过滤时,它将以原始代码呈现。有没有一种视频友好的方式来过滤类似的内容,或者有没有人对另一种方式有什么建议?提前谢谢你的建议

while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
$video= htmlspecialchars( $row['video'], ENT_NOQUOTES, 'UTF-8' );
}

echo "$video";
例如,在数据库中,视频将如下所示

    <object width="464" height="368" id="669545" type="application/x-shockwave-flash" 
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" alt="Aqua Teen Hunger Force - Hand Banana Funny 
 Videos"><param name="movie" value="http://embed.break.com/NjY5NTQ1"></param><param 
name="allowScriptAccess" value="always"></param><embed src="http://embed.break.com/NjY5NTQ1" 
type="application/x-shockwave-flash" allowScriptAccess=always width="464" height="368"></embed></
object><br><font size=1><a href="http://www.break.com/usercontent/2009/2/Aqua-Teen-Hunger-Force-Hand-
Banana-669545.html" target="_blank">Aqua Teen Hunger Force - Hand Banana</a> - Watch more <a href="http://
www.break.com" target="_blank">Funny  Videos</a></font>

-观看更多
通常,在将用户输入插入HTML时,您应该
htmlspecialchars()。但是在这种情况下,您已经有了HTML,所以您没有什么可以做的

您无法有效地筛选嵌入式插件。如果您允许用户指定任意Flash文件或其他插件,那么您已经有效地为他们提供了对您的安全上下文的免费跨站点脚本访问权限,再多的字符串清理也无法解决这一问题

如果您确实需要允许用户提交任意Flash或其他
/
代码,则需要在单独的安全上下文中托管该不受信任的代码。通常,您将主站点放在
www.example.com
上,并将
添加到
stuff.example.com
中,以吐出不受信任的
代码。然后,当插件代码试图做一些恶意的事情时,至少它只能影响
stuff.example.com
,而不会影响
www.example.com
上的任何真正的Web应用程序


或者,您只能允许用户发布来自您信任的提供商的视频内容,例如
youtube.com
。然后你只需要让他们提交一个YouTube视频ID,然后自己构建
代码来指向该ID的URL。

我喜欢第三种选择,但是如果他们将flash或javascript内容发布到文本区域,如果过滤输出,htmlspecialchars会阻止恶意代码被执行吗?过滤/防止跨站点脚本攻击还有其他方法吗?是的,如果他们在输入中键入
,而您在退出时将
htmlspecialchars()
该值输入页面,他们将看到文本
,而不是实际的脚本标记。还有其他方法,比如HTML在输入数据进入数据库之前对其进行转义/过滤,遗憾的是,很多人都这样做。。。这些方法的技术术语是“破碎的”。只需确保在创建HTML输出时,在插入HTML之前,每一段纯文本(无论是来自用户输入、数据库还是其他地方)都是
htmlspecialchars()
ed。(您可能需要创建一个名为
h()的帮助函数)
这是
回显htmlspecialchars
的功能,因此您不必键入
太多…)这是一个好主意,哈哈,我确实经常使用htmlspecialchars,感谢您的见解,非常感谢