2022年6月9日 星期四

[研究]Forify SCA 的 Open Redirect 問題(六)用HtmlSanitizer套件

[研究]Forify SCA 的 Open Redirect 問題(六)用HtmlSanitizer套件

2022-06-09

[研究]Forify SCA 的 Open Redirect 問題(一)重導 Response.Redirect() 與 Server.Transfer()
https://shaurong.blogspot.com/2021/07/aspnetfortify-sca-open-redirect.html
後來發現在某些情況下,這樣改會有問題。

[研究]Forify SCA 的 Open Redirect 問題(二)ckeditor 的 tmpFrameset.html
https://shaurong.blogspot.com/2021/07/aspnetfortify-scatmpframesethtmlopen.html

[研究]Forify SCA 的 Open Redirect 問題(三)回到上一頁按鈕、返回按鈕https://shaurong.blogspot.com/2021/08/aspnet-fortify-scaopen-redirect.html

[研究]Forify SCA 的 Open Redirect 問題(四)用 ASP.NET + JavaScript 來解決
http://shaurong.blogspot.com/2021/08/forify-sca-open-redirect-aspnet.html

[研究]Forify SCA 的 Open Redirect 問題(五)用空的函數欺騙(失敗)
https://shaurong.blogspot.com/2022/06/forify-sca-open-redirect.html

[研究]Forify SCA 的 Open Redirect 問題(六)用HtmlSanitizer套件
https://shaurong.blogspot.com/2022/06/forify-sca-open-redirect-htmlsanitizer.html

突然想到 ASP.NET + JavaScript 方式可否順利重導,不被 Micro Focus Forify SCA (Static Code Analyzer ) 原始碼掃描 報告有 Open Redirect 問題呢?測試了一下

NuGet 安裝 HtmlSanitizer 7.1.512 套件

https://github.com/mganss/HtmlSanitizer

HtmlSanitizer 是一個 .NET 庫,用於從可能導致XSS 攻擊的構造中清除 HTML 片段和文檔。它使用AngleSharp來解析、操作和渲染 HTML 和 CSS。

Default3.aspx.cs

using System;

namespace WebApplication1
{
    public partial class Default3 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string url = "/WebForm1.aspx?ID=" + Request.QueryString["ID"].ToString();
            url = Common.MyAntiXssFilter(url);
            Response.Redirect(url);
        }
    }
}

Common.cs

using Ganss.XSS;

namespace WebApplication1
{
    public class Common
    {
        public static string MyAntiXssFilter(object inputObject)
        {
            string inputStr = "";
            if (inputObject != null)
            {
                inputStr = inputObject.ToString();
            }
            var sanitizer = new HtmlSanitizer();
            sanitizer.AllowedAttributes.Add("class");
            sanitizer.AllowedAttributes.Add("id");
            //sanitizer.AllowedAttributes.Add("&"); // 沒用; 若處理網址, & 會變成 &
            var sanitized = sanitizer.Sanitize(inputStr);
            sanitized = sanitized.Replace("&", "&");
            return sanitized;
        }
    }
}

實測結果,過關。

(完)

沒有留言:

張貼留言