Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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 mysql-存储嵌入代码(youtube、vimeo等)_Php_Mysql_Youtube_Embed_Eval - Fatal编程技术网

Php mysql-存储嵌入代码(youtube、vimeo等)

Php mysql-存储嵌入代码(youtube、vimeo等),php,mysql,youtube,embed,eval,Php,Mysql,Youtube,Embed,Eval,如何最好地存储用于嵌入的html 我能想到的唯一办法是: 将嵌入的html添加到id所在的位置,然后将其存储在数据库中,并使用Eval执行它 或 插入一个奇怪的字符组合,作为将在php中被id替换的标记。选项#2更安全-万一有人试图对您的DB执行SQL注入攻击,他们就不能利用您的嵌入操作在服务器端执行注入的php。他们最希望的就是网络钓鱼或XSS攻击 另一种方法是用XML格式化适当的数据,并在数据库中存储XSLT,以将数据转换为正确的嵌入代码。对于您的案例来说,这可能有点过头了,但与上述两种方法

如何最好地存储用于嵌入的html

我能想到的唯一办法是:

将嵌入的html添加到id所在的位置,然后将其存储在数据库中,并使用Eval执行它

插入一个奇怪的字符组合,作为将在php中被id替换的标记。

选项#2更安全-万一有人试图对您的DB执行SQL注入攻击,他们就不能利用您的嵌入操作在服务器端执行注入的php。他们最希望的就是网络钓鱼或XSS攻击

另一种方法是用XML格式化适当的数据,并在数据库中存储XSLT,以将数据转换为正确的嵌入代码。对于您的案例来说,这可能有点过头了,但与上述两种方法相比,它更具可扩展性,更不容易出错

编辑:XML版本的框架代码

XML 这方面的好处在于,您可以创建一个类来生成输入XML,并且它可以包含要传递给
标记的所有参数。如果不向XSLT添加处理指令来处理它们,它们将被默默地忽略。创建一个类来生成基本的XML,以及每个要显示的媒体类型的子类,生成XML以通过转换应该很容易。

选项2更安全-以防有人对您的数据库执行SQL注入攻击,然后他们不能利用您的嵌入操作在服务器端执行注入的PHP。他们最希望的就是网络钓鱼或XSS攻击

另一种方法是用XML格式化适当的数据,并在数据库中存储XSLT,以将数据转换为正确的嵌入代码。对于您的案例来说,这可能有点过头了,但与上述两种方法相比,它更具可扩展性,更不容易出错

编辑:XML版本的框架代码

XML
这方面的好处在于,您可以创建一个类来生成输入XML,并且它可以包含要传递给
标记的所有参数。如果不向XSLT添加处理指令来处理它们,它们将被默默地忽略。创建一个类来生成基本的XML,以及每个要显示的媒体类型的子类,生成XML以通过转换应该很容易。

为什么不存储11个字符的视频代码,然后在任何需要嵌入视频的地方构建HTML

见此:

为什么不直接存储11个字符的视频代码,然后在需要嵌入视频的任何地方构建HTML

见此:

我有没有听到
eval
?首先,这是邪恶的,不是逃避。第二,在PHP忍者来追捕你之前逃跑;)是的,用户永远不应该使用eval。它也会给你带来大麻烦。我有没有听到
eval
?首先,这是邪恶的,不是逃避。第二,在PHP忍者来追捕你之前逃跑;)是的,用户永远不应该使用eval。这也会给你带来大麻烦。你能建议我怎么做你的XML替代选项吗?或者至少给我指出正确的方向:)谢谢你的XML代码。。。我意识到我可以做第一个选择。。。但是将它们存储在文件系统和数据库中嵌入文件的目录中。。。。这样就减轻了数据库的一些负载,使它比选项2更容易实现,也不容易出错。您能建议我如何使用您的XML替代选项吗?或者至少给我指出正确的方向:)谢谢你的XML代码。。。我意识到我可以做第一个选择。。。但是将它们存储在文件系统和数据库中嵌入文件的目录中。。。。这样就减轻了数据库的一些负载,使得它比选项2更容易实现,也不容易出错。
<video>
  <url>http://example.com/video.flv</url>
</video>
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" />
  <xsl:template match="video">
    <xsl:element name="embed">
      <xsl:attribute name="src"><xsl:value-of select="url/text()" /></xsl:attribute>
      <xsl:attribute name="width">500</xsl:attribute>
    </xsl:element>
  </xsl:template>
</xsl:transform>
// assuming the XSLT above is stored in SomeTable.transform, and the above XML has been stored in $xml_text
$xml_doc = new DOMDocument();
$xml_doc->loadXML($xml_text);

$xsl_doc = new DOMDocument();
$xsl_doc->loadXML(GetXSLT("flv"));

$processor = new XSLTProcessor();
$processor->importStyleSheet($xsl_doc);
echo $processor->transformToXML($xml_doc);

function GetXSLT($type)
{
    $db = mysql_connect("user", "password", "host"); // not sure if I got the order right here, but whatever
    $res = mysql_query("SELECT transform FROM SomeTable WHERE type = '$type'"); // should use parameters instead of directly embedding the type here to avoid bugs and exploits, but whatever
    $array = mysql_fetch_assoc($res);
    return $array['transform'];
}