-2

在博客系统中,我正在将具有特定 url 的图像转换为 iframe。这也会生成一个javascript,但我不确定这是否真的安全。所以请在这里帮助我。

preg_match_all('~<img src="http://the-image.jpg" ([^>]+)>~i', $blog_entry, $matches);
        $iframe = array();
        foreach ($matches[1] as $str) {
            preg_match_all('~([a-z]([a-z0-9]*)?)=("|\')(.*?)("|\')~is', $str, $pairs);
            $iframe[] = array_combine($pairs[1], $pairs[4]);
        }

$iframe_width = htmlspecialchars($iframe['0']['width']);
        $iframe_src = mysql_real_escape_string($iframe['0']['alt']);
        $iframe_id = htmlspecialchars($iframe['0']['border']);
        $iframe_width = strip_tags($iframe_width);
        $iframe_src = strip_tags($iframe_src);
        $iframe_id = strip_tags($iframe_id);

        $t_blog_entry = preg_replace('~<img src="http://the-image.jpg" ([^>]+)>~i','<iframe src="'. $iframe_src .'" scrolling="no" frameborder="0" width="'. $iframe_width .'" height="0" style="border:none; overflow:hidden;" allowTransparency="true" id="'. $iframe_id .'-iframe"></iframe>',$blog_entry);

这也会生成一个像这样的javascript:

<script type="text/javascript">
        $(document).ready(function() {
            $.getJSON("http://api.votelr.com/api-height.php?id=<?php echo ''. $votelr_id .''; ?>&callback=?", function(datavotelr){
                $('#<?php echo ''. addslashes($votelr_id) .''; ?>-iframe').css('height', datavotelr);
            });
        });

也许我在这里疯了,这完全不安全?让用户以某种方式操纵 javascript 或其他东西,有没有办法解决这个问题?

4

1 回答 1

1

mysql_real_escape_string 需要 mysql 连接才能工作。
htmlspecialchars 与 htmlentities 的效果不同,我相信最后一个更好。

无论是 int 类型,都将它
转换为 $id = (int) $value_int;

但是,如果您只想将图像转换为 iframe 内,则可以只使用 javascript 而不需要 php 创建 Element iframe 并将 img 标签“添加”到其中。

于 2012-05-02T14:00:41.090 回答