在代码的最后一行中转义URL参数的好方法是什么,以防止通过参数化的href url注入HTML?我的意思是: editform.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);
答案 0 :(得分:3)
我会将urlencode用于链接,将htmlspecialchars用于文字。
def content_from_params
case params[:shout][:content_type]
when "TextShout" then TextShout.create(text_shout_content_params)
when "PhotoShout" then PhotoShout.create(photo_shout_content_params)
end
end
答案 1 :(得分:1)
对于网址的任何组件,您需要对其进行网址编码(使用urlencode
)。这样可以避免URL本身出现问题,包括空格,特殊字符和&
。
然后您需要使用htmlspecialchars
转义完整的属性值。这同样适用于HTML中包含的任何文本。