根据 PHP 文件中的 URL 选择颜色
Choosing a color based on URL in a PHP file
我已经看到使用 SVG 完成此操作,但我不确定要搜索什么才能找到类似的东西。我搜索的所有内容都是不相关的结果。
假设我有一个 PHP 文件,其中包含:
<style>
.logo {
}
</style>
我希望能够将 URL 键入 my.php?fill=be0000
并将 php 键入 return:
<style>
.logo {
fill: #be0000;
}
</style>
我知道这很简单,我就是想不通。
有很多方法可以实现这一点,但这里有一个建议:
<style>
.logo {
fill: #<?= !empty($_GET["fill"]) ? $_GET["fill"] : "00bf00" ?>;
}
</style>
这会将值设置为 fill
GET 参数或 00bf00
中传递的任何值(如果未设置)。
我认为这里需要强调的是,简单地从查询字符串中获取数据并将其放入 HTML 内容中是完全错误的,应不惜一切代价避免。
例如,假设您的 PHP 代码包含以下内容:
$fill_color = !empty($_GET["fill"]) ? $_GET["fill"] : "ffffff";
echo ".logo { fill: #$fill_color; }\n";
不难看出,无论在查询字符串中为 fill
提供什么值,这段代码都能正常工作。例如,没有什么可以阻止某人请求 URL,如下所示:
http://example.com/?fill=red%3B%7D%3C%2Fstyle%3E%3Cscript%3Elocation.href%3D%22http%3A%2F%2Fevil.com%22%3C%2Fscript%3E
这将使您的网页立即重定向到 evil.com:
.logo { fill: #red;}</style><script>location.href="http://evil.com"</script>; }
这使得发起包括网络钓鱼和会话窃取在内的攻击变得简单,您确实应该不惜一切代价避免这些攻击。
如果您记得永远不要相信用户提供的数据,您就可以避免这些问题。在此示例中,您也许可以确保 fill
的值由六个十六进制数字组成, 而不是其他 。如果它没有通过这个测试,你应该忽略它。
您的代码应该如下所示:
$fill_color = "ffffff";
if (!empty($_GET["fill"]) && preg_match('/^[0-9a-f]{6}$/i', $_GET["fill"]) === 1) {
$fill_color = $_GET["fill"];
}
echo ".logo { fill: #$fill_color; }\n";
我已经看到使用 SVG 完成此操作,但我不确定要搜索什么才能找到类似的东西。我搜索的所有内容都是不相关的结果。
假设我有一个 PHP 文件,其中包含:
<style>
.logo {
}
</style>
我希望能够将 URL 键入 my.php?fill=be0000
并将 php 键入 return:
<style>
.logo {
fill: #be0000;
}
</style>
我知道这很简单,我就是想不通。
有很多方法可以实现这一点,但这里有一个建议:
<style>
.logo {
fill: #<?= !empty($_GET["fill"]) ? $_GET["fill"] : "00bf00" ?>;
}
</style>
这会将值设置为 fill
GET 参数或 00bf00
中传递的任何值(如果未设置)。
我认为这里需要强调的是,简单地从查询字符串中获取数据并将其放入 HTML 内容中是完全错误的,应不惜一切代价避免。
例如,假设您的 PHP 代码包含以下内容:
$fill_color = !empty($_GET["fill"]) ? $_GET["fill"] : "ffffff";
echo ".logo { fill: #$fill_color; }\n";
不难看出,无论在查询字符串中为 fill
提供什么值,这段代码都能正常工作。例如,没有什么可以阻止某人请求 URL,如下所示:
http://example.com/?fill=red%3B%7D%3C%2Fstyle%3E%3Cscript%3Elocation.href%3D%22http%3A%2F%2Fevil.com%22%3C%2Fscript%3E
这将使您的网页立即重定向到 evil.com:
.logo { fill: #red;}</style><script>location.href="http://evil.com"</script>; }
这使得发起包括网络钓鱼和会话窃取在内的攻击变得简单,您确实应该不惜一切代价避免这些攻击。
如果您记得永远不要相信用户提供的数据,您就可以避免这些问题。在此示例中,您也许可以确保 fill
的值由六个十六进制数字组成, 而不是其他 。如果它没有通过这个测试,你应该忽略它。
您的代码应该如下所示:
$fill_color = "ffffff";
if (!empty($_GET["fill"]) && preg_match('/^[0-9a-f]{6}$/i', $_GET["fill"]) === 1) {
$fill_color = $_GET["fill"];
}
echo ".logo { fill: #$fill_color; }\n";