在我的页面上安全地回显用户提交的链接,以便回显用户提交的url不包含html或javascript,这打破了我的页面的html。关于html中断,我的意思是恶意用户在url提交输入字段(在我的链接提交webform上)添加html标签,并且在将他的url作为我的页面上的链接输出时,他的html输入会扰乱我页面上的html。或用户广告Javascipt,发出警报或将其他访问者从我的页面重定向到网络钓鱼网站。必须防止恶意用户提交包含以下部分的urls:
?search=<script>alert('hacked')</script>真的要阻止用户做这样的事情。防止他们添加代码,当我的其他访问者加载我的页面或单击恶意用户提交的链接时,他们无法触发恶意代码或无法重定向到恶意网站。我有两个选择。不确定哪一个是有效的...这两个中哪一个是有效的回声,我应该坚持哪一个:
一个。
//WHICH OF THE FOLLOWING TWO ECHOES IS BEST ?
//OPTION 1
echo 'Link: <a href=' .'"' .strip_tags($url) .'"' .'>' .'<b>' .strip_tags($url) .'</b>' .'</a>'; echo '<br>';B.
//OPTION 2
echo 'Link: <a href=' .'"' .htmlspecialchars($url) .'"' .'>' .'<b>' .htmlspecialchars($url) .'</b>' .'</a>'; echo '<br>'; 上下文
$query = "SELECT id,date_and_time,domain,domain_email,ip,url,anchor,description,keyword From $table WHERE $column = ? LIMIT $offset,$max";
$stmt = mysqli_stmt_init($conn);
if(mysqli_stmt_prepare($stmt,$query))
{
mysqli_stmt_bind_param($stmt,'s',$find);
mysqli_stmt_execute($stmt);
if($result = mysqli_stmt_get_result($stmt))
{
$columns = mysqli_fetch_array($result);
$submission_id = $columns['id'];
$submission_date_and_time = $columns['date_and_time'];
$domain = $columns['domain'];
$domain_email = $columns['email'];
$ip = $columns['ip'];
$url = $columns['url'];
$anchor = $columns['anchor'];
$description = $columns['description'];
$keyword = $columns['keyword'];
$keyphrase = $columns['keyphrase'];
echo 'Submission Id: ' .$submission_id; echo '<br>';
echo 'Submission Date And Time: ' .$submission_date_and_time; echo '<br>';
echo 'Email: ' .$domain_email; echo '<br>';
echo 'Domain: ' .$domain; echo '<br>';
echo 'Url: ' .$url; echo '<br>';
echo 'Anchor: ' .$anchor; echo '<br>';
echo 'Description: ' .$description; echo '<br>';
echo 'Keyword: ' .$keyword; echo '<br>';
echo 'Keyphrase: ' .$keyword; echo '<br>';
//WHICH OF THE FOLLOWING TWO ECHOES IS BEST ?
//OPTION 1
echo 'Link: <a href=' .'"' .strip_tags($url) .'"' .'>' .'<b>' .strip_tags($url) .'</b>' .'</a>'; echo '<br>';
//OPTION 2
echo 'Link: <a href=' .'"' .htmlspecialchars($url) .'"' .'>' .'<b>' .htmlspecialchars($url) .'</b>' .'</a>'; echo '<br>';
}
else
{
//Error Messages for Production Mode only.
echo 'Record fetching failed!';
echo 'Error: ' .mysqli_stmt_error($stmt);
echo 'Error: ' .mysqli_stmt_errno($stmt);
}
mysqli_stmt_close($stmt);
}
mysqli_close($conn);或者,如果你有更好的编码方式来安全地输出用户提交的链接,那么我想看看你是如何做到的。
发布于 2021-08-18 17:07:35
在HTML上下文中输出任何内容时,请始终使用htmlspecialchars()。只要养成对每个字符串都这样做的习惯,不管它包含什么。
至于strip_tags(),许多人怀疑它的有用性。它只是一个删除<和>之间信息的愚蠢的正则表达式。它可能会保护您免受某些攻击,但它绝对不是一种安全措施。这种影响可能只是偶然的。如果需要删除<和>之间的信息,最好使用普通正则表达式,它可能更快、更容易实现。
如果URL来自用户输入,则需要验证该输入是否为正确的URL。PHP有一个过滤器FILTER_VALIDATE_URL来验证URL,可以用来拒绝无效的输入。
https://stackoverflow.com/questions/68835636
复制相似问题