首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该在这里用strip_tags()或htmlspecialchars()回显用户提交的链接吗?

我应该在这里用strip_tags()或htmlspecialchars()回显用户提交的链接吗?
EN

Stack Overflow用户
提问于 2021-08-18 15:55:22
回答 1查看 41关注 0票数 0

在我的页面上安全地回显用户提交的链接,以便回显用户提交的url不包含html或javascript,这打破了我的页面的html。关于html中断,我的意思是恶意用户在url提交输入字段(在我的链接提交webform上)添加html标签,并且在将他的url作为我的页面上的链接输出时,他的html输入会扰乱我页面上的html。或用户广告Javascipt,发出警报或将其他访问者从我的页面重定向到网络钓鱼网站。必须防止恶意用户提交包含以下部分的urls:

代码语言:javascript
运行
复制
?search=<script>alert('hacked')</script>

真的要阻止用户做这样的事情。防止他们添加代码,当我的其他访问者加载我的页面或单击恶意用户提交的链接时,他们无法触发恶意代码或无法重定向到恶意网站。我有两个选择。不确定哪一个是有效的...这两个中哪一个是有效的回声,我应该坚持哪一个:

一个。

代码语言:javascript
运行
复制
//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.

代码语言:javascript
运行
复制
//OPTION 2
echo 'Link: <a href=' .'"' .htmlspecialchars($url) .'"' .'>' .'<b>' .htmlspecialchars($url) .'</b>' .'</a>'; echo '<br>'; 

上下文

代码语言:javascript
运行
复制
$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);

或者,如果你有更好的编码方式来安全地输出用户提交的链接,那么我想看看你是如何做到的。

EN

Stack Overflow用户

回答已采纳

发布于 2021-08-18 17:07:35

在HTML上下文中输出任何内容时,请始终使用htmlspecialchars()。只要养成对每个字符串都这样做的习惯,不管它包含什么。

至于strip_tags(),许多人怀疑它的有用性。它只是一个删除<>之间信息的愚蠢的正则表达式。它可能会保护您免受某些攻击,但它绝对不是一种安全措施。这种影响可能只是偶然的。如果需要删除<>之间的信息,最好使用普通正则表达式,它可能更快、更容易实现。

如果URL来自用户输入,则需要验证该输入是否为正确的URL。PHP有一个过滤器FILTER_VALIDATE_URL来验证URL,可以用来拒绝无效的输入。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68835636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档