gpt4 book ai didi

php - 什么应用程序在 SQL 查询中的 PHP 标记周围插入 html 注释标记?

转载 作者:行者123 更新时间:2023-11-29 02:24:09 24 4
gpt4 key购买 nike

我正在使用 PDO 和准备好的语句将条目插入 MySQL 数据库。到目前为止效果很好。我意识到,如果输入也使用 htmlentities() 之类的函数进行了清理,那么我的问题基本上就没有意义了,但是出于好奇,注入(inject)数据库的 php 代码是否曾经在回去的路?

例如:

    $connection = new PDO(//some database info);
$query = $connection->prepare("INSERT INTO House (Rooms) VALUES (:newroom);");
$query->bindValue(':newroom', $_POST['newroom'], PDO::PARAM_STR);
$query->execute();

现在假设用户输入 $_POST['newroom'] 的值:

    <?php var_dump($connection); ?>

这会按原样进入数据库,因为尽管 PDO 会阻止 SQL 代码的执行,但它不一定会转义 PHP 标记(或者会转义吗?这基本上是我的问题。)

现在假设用户访问执行此查询的另一个页面:

    $connection = new PDO(//some database info);
$query = $connection->prepare("SELECT * FROM Rooms;");
$query->execute();

然后循环遍历结果,将它们作为选择输入中的选项以 html 形式回显,如下所示:

    <select>
<option value = 1>Kitchen</option>
<option value = 2>Bathroom</option>
<option value = 3><?php var_dump($connection); ?></option>
</select>

我试过这样做,数据库中的 php 标签用 HTML 注释标签回显,导致选择输入中出现空白条目,如下所示:

    <option value = 3><!--?php var_dump($connection) ?--></option>

显然,php 没有执行。太好了,但我很好奇是什么决定逃避标签。 MySQL? PHP 本身?我能否始终指望这种行为,即从数据库返回的 php 代码将解析为 html 注释?

最佳答案

没有。 PHP 代码只是纯文本。除非将该文本放入可执行上下文中,否则它永远不会被执行。例如。你需要类似的东西

$php_code_from_db = $db->fetchRow('php_code');
eval($php_code_from_db);

在您的代码片段中将其转储出来只会将原始 PHP 代码发送到客户端的浏览器。其中一些将被解释为无效的 HTML,例如

<?php
echo "Hello"
?>
World

将呈现为 World在浏览器中,因为 <? ... ?>将被视为无效/未知的 HTML 标记。

此外,PHP 代码对浏览器来说毫无意义。世界上 99.9999% 的网络冲浪者不会在他们的计算机上安装 PHP。即使他们这样做了,浏览器也不会执行它从网站接收到的嵌入在某些 html 中的任何 php 代码。

关于php - 什么应用程序在 SQL 查询中的 PHP 标记周围插入 html 注释标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26243037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com