【发布时间】:2018-01-05 21:35:05
【问题描述】:
在代码的最后一行中转义 URL 参数以防止通过参数化的 href url 注入 HTML 的好方法是什么?我的意思是: 编辑form.php?id=' 。 $row["CustomerID"] 。 '">' 部分。
require_once 'common.php';
$stmt = $db->query("SELECT * FROM customers ORDER BY CustomerID DESC");
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
if ($results && $stmt->rowCount() > 0)
{
echo '<h2>Results</h2>';
//Here comes some plain HTML for table design.
//Then a FOR loop.
foreach ($results as $row)
{
echo '<tr>';
echo '<td><a href="editform.php?id=' . $row["CustomerID"] . '">' . $row["CustomerID"] . '</a></td>';
我正在考虑在 common.php 中编写一个函数。比如:
function escape($html)
{
return htmlspecialchars($html, ENT_QUOTES | ENT_SUBSTITUTE, "UTF-8");
}
这将是决定性的吗?或者我应该使用类似的东西: filter_var($url, FILTER_SANITIZE_URL);
【问题讨论】:
-
只使用
htmlspecialchars ($row["CustomerID"])php.net/manual/en/function.htmlspecialchars.php -
这里不需要转义,因为用户可以在地址栏中取消转义。在使用其值之前,请在
editform.php页面上转义$_GET['id']。 -
好的,这对我来说很有意义,但是我认为验证传入的数据是一种很好的做法,并且只有在将其作为输出发送或在另一个字符串中使用时才进行转义或编码.
-
@Bret 是的,这通常适用于您无法控制的值。 ID 是你应该控制的东西。但是,如果用户能够自己输入用户名并且您不确定在保存之前是否对其进行了适当的清理,那么您应该在显示用户名之前对其进行转义。
htmlspecialchars()是实现 HTML 输出的好方法。如果您想在 URL 中使用他们的名字,请使用urlencode()。
标签: php html code-injection