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等)

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

  1. WEB开发中常见的漏洞

    一.SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击.SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞.在设计程序,忽略了对输入字符串中夹带的 ...

  2. WEB开发中常见漏洞

    1.sql注入 SQL注入在黑客领域是一种非常常见的攻击手段,大家应该都听说过很多数据泄漏的案例,其中大部分都是采用SQL注入来获取数据的. SQL注入一般是前端向后台提交数据的时候,在数据中加入SQ ...

  3. 介绍web开发中实现会话跟踪的常用技术方法

    由于http是无状态的协议,这种特性严重阻碍了客户端与服务器进行动态交互,例如购物车程序,客户在购物车中添加了商品,服务器如何知道购物车已有的物品呢?为了支持客户端与服务器之间的交互,为了弥补http ...

  4. 《Web开发中让盒子居中的几种方法》

    一.记录下几种盒子居中的方法: 1.0.margin固定宽高居中: 2.0.负margin居中: 3.0.绝对定位居中: 4.0.table-cell居中: 5.0.flex居中: 6.0.trans ...

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

    PHP开发中常见的漏洞及防范 对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍和防范. ...

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

    WEB开发中一些常见的攻击方式及简单的防御方法 转载:http://blog.csdn.net/seven__________7/article/details/70896913

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

    页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...

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

    前几年,我有机会能参与一些有趣的项目,并且独立完成开发.升级.重构以及新功能的开发等工作. 本文总结了一些PHP程序员在Web开发中经常 忽略的关键错误,尤其是在处理中大型的项目上问题更为突出.典型的 ...

  9. web开发中的安全问题

    web开发中很多东西由前段来负责判断,比如常见的邮箱 电话号码,前端判断到不是一个正确的格式,在你点击提交时候提示你格式填错了,然后不请求后端php,直到你填写正确的格式为止.这种其实可以修改js或者 ...

随机推荐

  1. 1.2(JavaScript学习笔记)JavaScript HTML DOM

    一.DOM DOM全称为document object model(文档对象模型). 此处的文档指当前HTML文档,对象指HTML标签. 当网页被加载时,浏览器会创建页面的文档对象模型. 下面结合具体 ...

  2. Problem A: 自定义函数strcomp(),实现两个字符串的比较

    #include<stdio.h> int strcmp(char *str1,char *str2) { if(str1!=NULL&&str2!=NULL) { whi ...

  3. subline text 常用插件

    C语言 Alignment   c Improved   cool format doc Blocker   cTags   AllAutoComplete       wakatime 精确统计你再 ...

  4. palm os

    在3G展会上,Palm将告别Palm OS操作系统 2009年2月12日消息,据国外媒体报道,周三,Palm CEO埃德•科林根(Ed Colligan)在旧金山的一个投资者会议上表示,Palm将告别 ...

  5. Signavio

    Signavio web建模器 从version 4.1开始,jBPM绑定了一个完全开源的基于web的BPM设计器工具 叫做'Signavio'.这个Signavio web建模器是和JBoss jB ...

  6. 解决marathon上docker实例一直waitting的问题

    可能原因: 1. mesos-slave上资源不够,一般是内存不够.可上mesos-master:5050上查看 2. 宿主机上没有镜像,一直在拉或拉不到.上宿主机上查看: docker images ...

  7. mysql将字符串字段转为数字排序或比大小

    SELECT * FROM Student WHERE 1 = 1 ORDER BY -ID DESC ; SELECT * FROM Student WHERE 1 = 1 ORDER BY (ID ...

  8. 二.Consumer、Producer简单例子

    1.先导入jar包,我使用的是maven <dependency> <groupId>com.alibaba.rocketmq</groupId> <arti ...

  9. Linux pci驱动源码

    #include <linux/kernel.h>#include <linux/errno.h>#include <linux/module.h>#include ...

  10. after、append和appendTo三个函数的区别

    jq文档的说明是 1.after函数 定义和用法: after() 方法在被选元素后插入指定的内容. 语法: $(selector).after(content) 实例: <html>&l ...