B/S开发框架Web安全问题及防范规范之挂马和WebShell

时间:2022-07-05 21:27:20

        Web站点为什么会遭受攻击?是为了恶作剧?损害企业名誉?免费浏览收费内容?盗窃用户隐私信息?获取用户账号谋取私利?总之攻击方式层出不穷,作为B/S开发框架来说,帮助开发者做好解决安全问题也是刻不容缓的,本篇文章来告诉大家怎么防范挂马和WebShell攻击。

B/S开发框架Web安全问题及防范规范之挂马和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)选中“允许执行扩展路径”,以允许限制自动运行。如果未选中此选项,限制的状态将默认为“不允许”。以后,您可以通过选择限制并在“操作”窗格中单击“允许”来允许该限制。

物理处理