1. 程式人生 > >B/S開發框架Web安全問題及防範規範之掛馬和WebShell

B/S開發框架Web安全問題及防範規範之掛馬和WebShell

信息 處理程序 自動運行 code 被攻擊 保存 完全 進程模型 catch

Web站點為什麽會遭受攻擊?是為了惡作劇?損害企業名譽?免費瀏覽收費內容?盜竊用戶隱私信息?獲取用戶賬號謀取私利?總之攻擊方式層出不窮,作為B/S開發框架來說,幫助開發者做好解決安全問題也是刻不容緩的,本篇文章來告訴大家怎麽防範掛馬和WebShell攻擊。

技術分享圖片

適用範圍

Web網站

攻擊原理

Webshell是攻擊者在被攻擊網站上植入的aspx、php、jsp程序文件,攻擊者在入侵了一個web系統後,常常在將這些aspx、php、jsp木馬後門文件放置在web服務器的web目錄中,與正常的網站文件混在一起。然後攻擊者就可以通過正常的web訪問方式,訪問其植入aspx、php、jsp程序木馬後門控制web服務器,包括創建、修改、刪除文件,上傳下載文件,查看數據庫,執行任意程序命令等。

解決方案

應用程序處理

1、B/S開發框架處理SQL註入問題

2、B/S開發框架采用白名單的形式驗證文件上傳類型

代碼如下:

/// <summary>
/// 上傳文件信息
/// </summary>
public class UploadFileInfo
{
    /// <summary>
    /// 上傳結果(true 成功  false 失敗)
    /// </summary>
    public bool Result
    {
        get;
        set;
    }
    /// <summary>
    /// 上傳說明
    /// </summary>
    public string ResultMsg
    {
        get;
        set;
    }
    /// <summary>
    /// 文件名稱
    /// </summary>
    public string FileName
    {
        get;
        set;
    }
    /// <summary>
    /// 修改後文件名稱
    /// </summary>
    public string NewFileName
    {
        get;
        set;
    }
    /// <summary>
    /// 文件路徑
    /// </summary>
    public string FilePath
    {
        get;
        set;
    }
    /// <summary>
    /// 文件擴展名
    /// </summary>
    public string FileExtension
    {
        get;
        set;
    }
    /// <summary>
    /// 文件大小
    /// </summary>
    public int FileSize
    {
        get;
        set;
    }
}

/// <summary>
/// 文件上傳幫助類
/// </summary>
public static class FileUploadHelper
{
    /// <summary>
    /// 文件上傳
    /// </summary>
    /// <param name="postedFile">上傳的文件</param>
    /// <param name="format">允許上傳的文件格式</param>
    /// <param name="maxSize"></param>
    /// <param name="filePath">保存路徑</param>
    /// <param name="savefileName">保存文件名(不含擴展名)</param>
    /// <returns></returns>
    public static UploadFileInfo Upload(HttpPostedFile postedFile, string format, int maxSize, string filePath, string saveFileName)
    {
        UploadFileInfo fileInfo = new UploadFileInfo();
        fileInfo.Result = true;
        fileInfo.FileName = Path.GetFileName(postedFile.FileName);
        fileInfo.FileExtension = Path.GetExtension(fileInfo.FileName);
        fileInfo.FileSize = postedFile.ContentLength;

        saveFileName = saveFileName + fileInfo.FileExtension;
        //驗證上傳文件的格式
        if (format.IndexOf(fileInfo.FileExtension) == -1)
        {
            fileInfo.Result = false;
            fileInfo.ResultMsg = "上傳失敗,上傳文件格式不合法";
            return fileInfo;
        }
        if (fileInfo.FileSize > maxSize)
        {
            fileInfo.Result = false;
            fileInfo.ResultMsg = "上傳失敗,上傳文件大小超出限制";
            return fileInfo;
        }
        try
        {
            string savePath = HttpContext.Current.Request.MapPath(filePath);
            //判斷物理路徑是否存在,若不存在則創建路徑
            DirectoryInfo dir = new DirectoryInfo(savePath);
            if (!dir.Exists)
            {
                dir.Create();
            }
            fileInfo.FilePath = filePath + saveFileName;
            postedFile.SaveAs(savePath + saveFileName);
        }
        catch
        {
            fileInfo.Result = false;
            fileInfo.ResultMsg = "上傳失敗,發生異常";
            return fileInfo;
        }
        return fileInfo;
    }
}

  


管理處理

web開發框架基於Windows 2008下使用IIS7部署的web服務器,對IIS7的各項配置進行分析,以提高基於此環境下的WEB服務器的安全性。
1磁盤及文件夾設置
為提高系統下數據的安全性,服務器文件格式一律劃分為NTFS格式,這樣可以更好的配置磁盤的各種訪問權限。一般情況下,各個分區都只賦予administrators和system權限,刪除其他用戶的訪問權限,以保證拒絕任何未授權用戶的訪問。
2為站點建立相應的用戶。
B/S開發框架軟件系統的每個站點都使用專門建立的用戶來進行權限分配,可以保證各個站點間是獨立的,被隔離開的,不會互相影響的。
此類用戶包含為站點建立用於匿名訪問的用戶和為用於應用程序池運行的用戶。匿名訪問用戶屬於GUEST組,應用程序池運行用戶屬於IIS_IUSRS組。
操作方法:右鍵點擊“我的電腦”中,選擇“管理”。選擇“本地用戶和組”窗格中,右鍵單擊“用戶”,選擇“新用戶”。在“新用戶”對話框中,設置“用戶名”、“密碼”並勾選“用戶不能更改密碼”、“密碼永不過期”,然後單擊“確定”。
選擇創建好的用戶,右鍵單擊用戶名,選擇屬性,設置用戶到相應的組即可。
3站點使用獨立的應用程序池
每個站點使用的應用程序池應該是獨立的,以便資源的合理分配,並且都以獨立的標識賬戶運行,在出現異常情況時也不會互相影響。
操作方法:
(1)打開“IIS信息服務管理器”,右鍵單擊“應用程序池”,選擇“新建應用程序池”,填上名稱,確定。
(2)單擊此應用程序池,在操作欄中選擇“高級設置”,將“進程模型標識”選擇為之前創建的應用程序池運行用戶。
(3)單擊需要配置的網站,在操作欄中選擇高級設置,應用程序池選擇為上一步創建的應用程序池。
4啟用匿名身份驗證
B/S開發框架網站目錄下所有文件啟用匿名身份驗證,便於用戶可以匿名訪問網站,並將之前建立的用戶分配到該網站。
操作方法:
(1)在功能視圖中雙擊“身份驗證”,右鍵單擊“匿名身份驗證”,選擇“啟用”。
(2)單擊該網站,在功能視圖中雙擊“身份驗證”,右鍵單擊“匿名身份驗證”,選擇“編輯”匿名身份驗證,並選擇“匿名用戶標識”為之前建立的用於匿名訪問的用戶。
註:需要賦予該匿名用戶對此網站目錄及文件相應的訪問權限。
5啟用基本身份驗證
為保護指定目錄不被匿名用戶訪問,需要啟用基本身份驗證,此項需要關閉指定目錄的匿名用戶訪問權限。
操作方法:
(1)在功能視圖中選擇“身份驗證”,右鍵單擊“匿名身份驗證”,選擇“禁用”匿名身份驗證。
(2)在功能視圖中雙擊“身份驗證”,右鍵單擊“基本身份驗證”,選擇“啟用”並編輯基本身份驗證,為基本身份認證配置擁有訪問權限的用戶。
6取消上傳目錄的執行權限
網站程序正常運行所需的權限並不是完全一樣的,可以在IIS中對網站目錄進行針對設置,一般目錄設置為讀取,滿足訪問、瀏覽即可;需要上傳文件的目錄,在設置了寫入權限後,可以將目錄的執行權限去掉。這樣即使上傳了木馬文件在此目錄,也是無法執行的。
操作方法:選中網站的上傳文件夾,選擇“處理程序映射”,“編輯功能權限”,取消腳本和執行功能。
7基於IP地址或域名授予訪問權限和拒絕訪問。
在IIS 7中,默認情況下所有Internet協議(IP)地址、計算機和域都可以訪問我們的站點。為了增強安全性,我們可以創建向所有IP地址(默認設置)、特定IP地址、IP地址範圍或特定域授予訪問權限的允許規則,以此來限制對站點的訪問。
註:IP地址限制只適用於IPv4地址。
在“功能視圖”中,雙擊“IPv4地址和域限制”。
在“操作”窗格中,單擊“添加允許條目”。
在“添加允許限制規則”對話框中,選擇“特定IPv4地址”、“IPv4地址範圍”或“域名”,接著添加IPv4地址、範圍、掩碼或域名,然後單擊“確定”。
8配置url授權規則。
我們可以允許或拒絕特定計算機、計算機組或域訪問服務器上的站點、應用程序、目錄或文件。通過配置URL授權規則,可以配置為指定組的成員訪問受限內容。
操作方法:
(1)在“功能視圖中,雙擊“授權規則”。在“操作”窗格中,單擊“添加允許規則”。
(2)在“添加允許授權規則”對話框中,可以選擇“所有用戶”、“所有匿名用戶”、“指定的角色或用戶組”、“指定的用戶”其中之一。
此外,如果要進一步規定允許訪問相應內容的用戶、角色或組只能使用特定HTTP謂詞列表,則還可以選中“將此規則應用於特定謂詞”。請在對應的文本框中鍵入這些謂詞。
9配置ISAPI和CGI限制
默認情況下,B/S開發框架的多種文件擴展名均可在Web服務器上運行,為了降低此風險,應只允許您具有的那些特定ISAPI擴展或CGI文件在Web服務器上運行。
操作方法:
(1)在“功能視圖”中,雙擊“ISAPI和CGI限制”。在“操作”窗格中,單擊“添加”。
(2)在“添加ISAPI或CGI限制”對話框的“ISAPI或CGI路徑”文本框中鍵入該.dll或.exe文件的路徑,或者單擊瀏覽按鈕(...)導航至該文件的位置。
在“描述”文本框中,鍵入有關限制的簡要描述。
(3)選中“允許執行擴展路徑”,以允許限制自動運行。如果未選中此選項,限制的狀態將默認為“不允許”。以後,您可以通過選擇限制並在“操作”窗格中單擊“允許”來允許該限制。

物理處理

B/S開發框架Web安全問題及防範規範之掛馬和WebShell