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("&", "&");
source = source.Replace("<", "<");
source = source.Replace(">", ">");
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");
}
}
}
参见:
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
web开发中常见的安全漏洞及避免方法的更多相关文章
- WEB开发中常见的漏洞
一.SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击.SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞.在设计程序,忽略了对输入字符串中夹带的 ...
- WEB开发中常见漏洞
1.sql注入 SQL注入在黑客领域是一种非常常见的攻击手段,大家应该都听说过很多数据泄漏的案例,其中大部分都是采用SQL注入来获取数据的. SQL注入一般是前端向后台提交数据的时候,在数据中加入SQ ...
- 介绍web开发中实现会话跟踪的常用技术方法
由于http是无状态的协议,这种特性严重阻碍了客户端与服务器进行动态交互,例如购物车程序,客户在购物车中添加了商品,服务器如何知道购物车已有的物品呢?为了支持客户端与服务器之间的交互,为了弥补http ...
- 《Web开发中让盒子居中的几种方法》
一.记录下几种盒子居中的方法: 1.0.margin固定宽高居中: 2.0.负margin居中: 3.0.绝对定位居中: 4.0.table-cell居中: 5.0.flex居中: 6.0.trans ...
- PHP开发中常见的漏洞及防范
PHP开发中常见的漏洞及防范 对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍和防范. ...
- WEB开发中一些常见的攻击方式及简单的防御方法
WEB开发中一些常见的攻击方式及简单的防御方法 转载:http://blog.csdn.net/seven__________7/article/details/70896913
- PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等
页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...
- Web开发中的18个关键性错误
前几年,我有机会能参与一些有趣的项目,并且独立完成开发.升级.重构以及新功能的开发等工作. 本文总结了一些PHP程序员在Web开发中经常 忽略的关键错误,尤其是在处理中大型的项目上问题更为突出.典型的 ...
- web开发中的安全问题
web开发中很多东西由前段来负责判断,比如常见的邮箱 电话号码,前端判断到不是一个正确的格式,在你点击提交时候提示你格式填错了,然后不请求后端php,直到你填写正确的格式为止.这种其实可以修改js或者 ...
随机推荐
- Java如何进行异常处理
关键字:throws.throw.try.catch.finally的用法 Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口.在Java中,每个异常都是一个对象,它 ...
- WPF中的动画——(五)关键帧动画
与 From/To/By 动画类似,关键帧动画以也可以以动画形式显示目标属性值. 和From/To/By 动画不同的是, From/To/By 动画只能控制在两个状态之间变化,而关键帧动画则可以在多个 ...
- Linux设备文件简介
转:http://www.360doc.com/content/11/0418/00/5087210_110410837.shtml 版权声明 本 文作者是一位自由软件爱好者,所以本文虽然不是软件,但 ...
- Flash&Flex大全
官方在线帮助(没标英文的都是中文) 用于 Adobe Flash Platform 的 ActionScript 3.0 参考 更多参考使这样的链接下载离线版:http://help.adobe.co ...
- 跟着我从零开始入门FPGA(一周入门XXOO系列)-1、Verilog语法
(本连载共七部分,这是第一部分) 作者:McuPlayer2013 (EETOP FPGA版块版主) 原帖地址:http://bbs.eetop.cn/thread-385362-1-1.html ...
- jQuery.toggleClass() 和detach()方法详解
一.toggleClass()函数: toggleClass()函数用于切换当前jQuery对象所匹配的每一个元素上指定的css类名.所谓"切换",就是如果该元素上已存在指定的类名 ...
- [转载]抓包工具Charles乱码解决办法
FROM: http://blog.csdn.net/huanghanqian/article/details/52973651 安装 SSL 证书 Mac 端 首先去 http://www.char ...
- java中class.forName和classLoader加载类的区分
java中class.forName和classLoader都可用来对类进行加载.前者除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块.而classLoade ...
- 转:用十条命令在一分钟内检查Linux服务器性能
转自:http://www.infoq.com/cn/news/2015/12/linux-performance?utm_campaign=rightbar_v2&utm_source=in ...
- Linux命令之编辑
vi是终端命令行里功能最强的文本编辑器了,但眼下须要用到的仅仅是文本编辑功能.与GCC.make等工具的整合应用如今还不须要,所以操作难度不大,习惯就好. Linux发行版所带的一般不是vi,而是vi ...