web开发中常见的安全漏洞及避免方法

1、安全攻击

1、SQL、HTML、JS、OS命令注入

2、XSS跨站脚本攻击,利用站内信任的用户,在web页面插入恶意script代码

3、CSRF跨站请求伪造,通过伪装来自信任用户的请求来利用受信任的网站。

4、目录遍历漏洞

5、参数篡改

6、会话劫持

2、防止攻击的措施总结

1) 对用户输入的数据进行全面安全检查或过滤,尤其注意检查是否包含SQL 或XSS特殊字符。

验证用户输入的数据,包括值、类型、范围等等,用验证控件进行验证 RequiredFieldValidator RangeValidator RegularExpressionValidator

这些检查或过滤必须在服务器端客户端都进行。客户端服务端都要进行验证,客户端为了提高用户体验,服务端才可以有效防止威胁

2)不要使用管理员权限的数据库连接,不要使用动态拼接sql

3)机密信息加密,不能使用明文

4)每个页面加载时,对用户合法性进行判断。

5)登录后session中的敏感信息需要加密,避免在永久cookies中存储敏感信息,重要的cookie标记为http only

6)发送敏感信息时使用SSL、POST方式,尽量使用新型web HSTS安全协议

7)不要直接抛出异常的详细信息给用户,异常返回友好的页面,防止用户看到敏感信息

8)在服务器与网络的接口处配置防火墙,用于阻断外界用户对服务器的扫描和探测。

9)限制网站后台访问权限,如:禁止公网IP访问后台;禁止服务员使用弱口令。

10)关闭windows的8.3格式功能。DOS系统下的命令方式为8.3格式,即文件名不超过8个字符,扩展名不超过3个字符。形如:???.exe 。

现在Windows系统文件名长度最长可达255个字符了。

11)限制敏感页面或目录的访问权限。

12)项目发布前使用使用漏洞扫描软件,如IBM appScan,UnisWebScanner,对安全性进行评估。

安全漏洞及防止:

1、sql注入漏洞
     1、在框架中内置对有害语句及符号的过滤,如insert ‘ update,在基类进行过滤,这样子类就不用关心也可以避免这些常用的攻击了

 /// <summary>
        /// 过滤 Sql 语句字符串中的注入脚本
        /// </summary>
        /// <param name="source">传入的字符串</param>
        /// <returns>过滤后的字符串</returns>
        public static string SqlFilter(string source)
        {
            if (string.IsNullOrEmpty(source))
            {
                return "";
            }
            //单引号替换成两个单引号
            source = source.Replace("‘", "‘‘");
            source = source.Replace("\"", "");
            source = source.Replace("&", "&amp");
            source = source.Replace("<", "&lt");
            source = source.Replace(">", "&gt");
            source = source.Replace("delete", "");
            source = source.Replace("update", "");
            source = source.Replace("insert", "");

            //半角封号替换为全角封号,防止多语句执行
            source = source.Replace(";", ";");

            //半角括号替换为全角括号
            source = source.Replace("(", "(");
            source = source.Replace(")", ")");

            ///////////////要用正则表达式替换,防止字母大小写得情况////////////////////

            //去除执行存储过程的命令关键字
            source = source.Replace("Exec", "");
            source = source.Replace("Execute", "");

            //去除系统存储过程或扩展存储过程关键字
            source = source.Replace("xp_", "x p_");
            source = source.Replace("sp_", "s p_");

            //防止16进制注入
            source = source.Replace("0x", "0 x");
            return source;
        }

2、坚持使用参数化方式赋值
     3、不要直接抛出异常的详细信息给用户,异常返回友好的页面,防止用户看到数据库的细节,关闭了Web.Config的CustomErrors的时候,可能就不会看到。
         <system.web>
              <compilation debug="true" targetframework="4.0" />
         </system.web>
2、XSS又叫CSS--Cross Site Script 跨站脚本攻击
     1、清理用户输入,过滤js代码,过滤特殊字符
          [1] <>(尖括号)     [5] ;(分号)
          [2] "(引号)           [6] ()(括号)
          [3] ‘(单引号)         [7] &(& 符号)
          [4] %(百分比符号) [8] +(加号)
     2、使用HttpUitility及AntiXSSLibrary类库中的方法对html代码进行处理

赋值不会弹框 this.lblName.Text = Encoder.HtmlEncode("<script>alert(‘OK‘);</script>");

编码方法 使用场景
HtmlEncode(String) 不受信任的HTML代码。
HtmlAttributeEncode(String) 不受信任的HTML属性
JavaScriptEncode(String) 不受信任的输入在JavaScript中使用
UrlEncode(String) 不受信任的URL
VisualBasicScriptEncode(String) 不受信任的输入在VBScript中使用
XmlEncode(String) 不受信任的输入用于XML输出
XmlAttributeEncode(String) 不 受信任的输入用作XML属性

3、用户信息用MD5加密

       #region MD5加密

        /// <summary>
        /// 获取MD5哈希值
        /// </summary>
        /// <param name="Text">字符串</param>
        /// <returns>MD5哈希值</returns>
        public static string GetMd5Hash(string Text)
        {
            MD5 md5 = MD5.Create();
            byte[] data = md5.ComputeHash(Encoding.Default.GetBytes(Text));
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < data.Length; i++)
            {
                builder.Append(data[i].ToString("x2"));
            }
            return builder.ToString();
        }

        /// <summary>
        /// 验证MD5哈希值
        /// </summary>
        /// <param name="Text">字符串</param>
        /// <param name="TextHash">哈希值</param>
        /// <returns>相同返回True,不同返回False</returns>
        public static bool VerifyMd5Hash(string Text, string TextHash)
        {
            string hash = GetMd5Hash(Text);
            StringComparer comparer = StringComparer.OrdinalIgnoreCase;
            if (0 == comparer.Compare(hash, TextHash))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        #endregion

  

4、在页面加载时判断用户是否登录,如果没有登录则转到登录界面,每个页面继承基类BaseControl

  protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //身份验证
            if (CurrentUser == null)
            {
                string request = System.Web.HttpContext.Current.Request.Headers.Get("X-Requested-With");

                if (string.Compare(request, "XMLHttpRequest", true) == 0)
                {
                    filterContext.Result = new JsonResult { Data = "登录超时,请刷新页面!" };
                    filterContext.HttpContext.Response.ContentType = "text/plain;charset=UTF-8";
                    filterContext.HttpContext.Response.Status = "403 Internal Server Error";
                    filterContext.HttpContext.Response.StatusCode = 403;
                }
                else
                {
                    filterContext.Result = new RedirectResult("~/Login/SessionOutTime");
                }
            }
        }

  

参见:

Web的脆弱性:各种注入、攻击

Web开发常见的几个漏洞解决方法

PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)

时间: 2024-10-23 17:17:30

web开发中常见的安全漏洞及避免方法的相关文章

WEB开发中常见的漏洞

一.SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击.SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞.在设计程序,忽略了对输入字符串中夹带的SQL指令的检查,被数据库误认为是正常的SQL指令而运行,从而使数据库受到攻击,可能导致数据被窃取.更改.删除,以及进一步导致网站被嵌入恶意代码.被植入后门程序等危害. 通常情况下,SQL注入的位置包括: (1)表单提交,主要是POST请求,也包括GET请求: (2)URL参数提交,主要为GET请求

前端开发中常见的一下漏洞bug

1.IE6下横向双倍margin bug (触发条件:块属性标签:float:横向margin设置:IE6下.解决办法:css中加入display:inline.) 2.css中公用属性首先声明:如对浏览器对某些标签有默认的margin 和padding 值首先声明默认值为0. 3.css中class类名必须有实际的意义,必须与内容相关:不得用纯数字用于class类名. 4.IE6下标签嵌套时,如果内层标签float,只有清除内层标签的浮动后外层标签才能被撑开. 5.清除浮动时用div而不用其它

web开发中常见特殊字符的对应值与转义字符

URL中的特殊字符: URL中的特殊字符是不能再URL中直接传递的,需要进行编码.编码的格式为:%加字符的ASCII码,即一个百分号 %,后面跟对应字符的ASCII(16进制)码值. 字符 名称 16进制值 + URL中的+表示空格 %2B 空格 URL中的空格可以用+号或者编码 %20 / 分割目录和子目录 %2F ? 分隔实际的URL和字符 %3F % 指定特殊字符 %25 # 表示书签,URL传输参数时会自动截断#后面内容 %23 & URL中的参数分隔符 %26 = UEL中指定的参数值

Web开发中常见的兼容性解决方案(持续汇总...)

大纲 问题背景 HTML篇 CSS篇 Javascript篇 参考资料 问题背景 由于市场上浏览器种类众多,而不同厂商的浏览器其内核亦不尽相同,甚至同一厂商,不同版本之间的浏览器解析都有所不同.所以各个浏览器对网页的解析就有一定出入,这也是导致浏览器兼容问题出现的主要原因. 我们的网页需要在主流浏览器上正常运行,就需要做好浏览器兼容.同一个功能我们可能有很多不同的代码实现方式,我们尽可能的选择兼容性高的写法. HTML篇 CSS篇 Javascript篇 参考资料 结束语 每个程序员一生要学习1

PHP开发中常见的漏洞及防范

PHP开发中常见的漏洞及防范 对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍和防范. 1.session文件漏洞 Session攻击是黑客最常用到的攻击手段之一.当一个用户访问某一个网站时,为了免客户每进人一个页面都要输人账号和密码,PHP设置了Session和Cookie用于方便用户的使用和访向. 防范: 从前面的分析可以知道,Session攻击最常见的就是会话劫持,也就是黑客通过

WEB开发中一些常见的攻击方式及简单的防御方法

WEB开发中一些常见的攻击方式及简单的防御方法 20151127 转载http://www.lvtao.net/dev/582.html SQL注入最常见的攻击方式,所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击. 跨站脚本攻击(XSS)跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取

Web开发中的18个关键性错误

前几年,我有机会能参与一些有趣的项目,并且独立完成开发.升级.重构以及新功能的开发等工作. 本文总结了一些PHP程序员在Web开发中经常 忽略的关键错误,尤其是在处理中大型的项目上问题更为突出.典型的错误表现在不能很好区分各种开发环境和没有使用缓存和备份等. 下面以PHP为例,但是其核心思想对每一个Web程序员都是适用的. 应用程序级别的错误 1.在开发阶段关闭了错误报告 我唯一想问的是:为什么?为什么在开发的时候要关闭错误报告? PHP有很多级别的错误报告,在开发阶段我们必须将它们全部开启.

web开发中的安全问题

web开发中很多东西由前段来负责判断,比如常见的邮箱 电话号码,前端判断到不是一个正确的格式,在你点击提交时候提示你格式填错了,然后不请求后端php,直到你填写正确的格式为止.这种其实可以修改js或者干脆用python里面的requests之类的http请求库直接请求接口,那么可以成功把错误的东西提交给后端进而存储到数据库了,那么这种就不太好了. 如果系统不重要,用的人不多,可以勉强放过这一点. 但有的很重要的系统,尤其涉及到金钱的接口,后端必须也做好验证.否则有人利用漏洞来破坏规则,造成金钱的

在web开发中你不得不注意的安全验证问题#1-SQL

前言 随着WEB开发的发展如日中天,越来越多的程序猿加入这个行列,尤其是在大型项目团队开发的过程中,程序员们的水平参差不齐.导致各种各样的安全验证不严密导致各种问题.正如那句话所说,水桶能装水的多少不取决于最高的挡板,而是最低的挡板. 那今天我就给大家演示一下常见的安全问题SQL的形成原因和预防. 环境准备 我本来打算用java做实验的,考虑到PHP的话比较快,就用PHP演示吧. 下面是我连接数据库的代码以及数据库的内容.文件名sql.php <?php $conn=mysql_connect(