什么是网络安全

  1. 什么是网络安全

作为程序员,主要是面向产品的安全的问题。比如sql注入,xss,csrf,cookie窃取等等,都值得我们去思考。保证网站运行正常,客户数据安全。

  1. sql注入

简单的说,就是利用表单提交数据和URL传参,来控制数据库,进行一些非法操作,比如,查询到不该知道的数据,破坏数据库的结构等等。如果网站存在SQL注入的漏洞,那么一定是可以用表单和URL参数,构造非法的SQL命令,从而操作数据库。

新建项目,新建SqlSecurityController控制器,新建两个index action一个用于httpget,一个用于httppost,在action头部使用特性。

这里使用了ado.net的方式查询数据库,name和password参数把页面提交的用户名和密码组成一条sql语句,查询完后把DataSet数据传到View。

View页面,当(ViewBag.data).Tables[0].Rows.Count有数据时,显示登陆成功。下面是提交form表单,用于提交用户名和密码登陆。

运行程序,地址栏输入/SqlSecurity/Index。输入正确的用户名和密码,登陆。

登陆成功。

再次打开/SqlSecurity/Index页面,用户名输入'or 1 = 1--,密码不填,登陆。

此时数据库执行的sql指令变成了

select * from usertable where name = ''or 1 = 1--' and password = ''

--在sql语句中是注释的意思。成功执行了语句,返回了usertable 表中的数据。

这就是sql注入,此隐患可让不法者查询到不该看的数据,删除数据,操作数据库。

解决方法也是有很多,这里使用sql参数化的方法,修改代码为两个字符串占位,后面通过new SqlParameter()为两个参数赋指。

运行程序,地址栏输入/SqlSecurity/Index。在用户名处输入'or 1 = 1--,登陆。提示失败。

用正确的用户名和密码登陆,登陆成功。

  1. XSS攻击

XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了。

新建SqlSecurityController控制器,新建两个index action一个用于httpget,一个用于httppost,在action头部使用特性。这里也用道了ado.net的方式来对数据库进行操作。

httpget特性的index action把查询出来的数据显示在view界面。

httpost特性的index action把输入的数据添加到数据库,然后跳转到index action查询数据。

新建Index view,用于展示和输入数据,@Html.Raw()返回的是没有编码的 HTML 标记。

运行程序,地址栏输入/XssAttack/Index。看到了两条数据和两个输入框。

在用户名处输入<a herf='www.baidu.com'>aaaa</a>,密码输入555。登陆。

保存到数据库后再次进入页面时,查询出3条数据。

提交用户名的时候是一个a标签链接,现在完全显示出来了。

又比如输入<script src="/Scripts/JavaScript.js"></script>加载非法脚本提交,当用户打开页面时就会执行脚本。

非法提交的跨站脚本信息显然是不被允许的。不过Razor语法帮我们做了很多。在index view视图中去掉@Html.Raw(),再次打开/XssAttack/Index。输入的标签被编码了。

或者用

@Html.AttributeEncode() @Html.Encode()来执行编码。最好还是在提交输入框内容时验证一下,当出现非法字符串时,出现提乱码。

4)CSRF攻击

CSRF(Cross-site request forgery)跨站请求伪造,也被称为"One Click Attack"或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。

攻击通过在授权用户访问的页面中包含链接或者脚本的方式工作。例如:一个网站用户Bob可能正在浏览聊天论坛,而同时另一个用户Alice也在此论坛中,并且后者刚刚发布了一个具有Bob银行链接的图片消息。设想一下,Alice编写了一个在Bob的银行站点上进行取款的form提交的链接,并将此链接作为图片src。如果Bob的银行在cookie中保存他的授权信息,并且此cookie没有过期,那么当Bob的浏览器尝试装载图片时将提交这个取款form和他的cookie,这样在没经Bob同意的情况下便授权了这次事务。

新建提交方式为POST Edit Action,负责修改用户信息。

这里我们只会让有权限的角色执行这个action,但当有权限的角色登陆后cookie信息存在,攻击者就可以骗取用户点击某个链接或者图片,该网站或图片转到Edit Action,修改了不该修改的数据等。

被骗取到的攻击网页。打开便会向服务器Edit Action提交修改信息。

运行程序,地址栏输入/XssAttack/Index。假如此处以被XSS攻击,注入了"致富发财的方法"这个链接,用户点击进去,就执行了攻击者的攻击页面。

执行一闪而过,回到index页面。id为31的数据被修改了。产生严重的后果。

CSRF防御

新建提交方式为get的Edit ation,在view页面的form提交标签内输入@Html.AntiForgeryToken()。

同时在提交到的Post Edit action添加特性[ValidateAntiForgeryToken]

修改id为31的数据为正常数据,运行程序,地址栏输入/XssAttack/Index。

当用户无意点击攻击链接时。便会报错。导致攻击失败。

而用/XssAttack/Edit正常修改,则成功。

防御攻击的原理和验证码类似,也可用验证码方式做到。

还有一种办法就是获取上一个页面,比如是从那一个页面跳转过来的,如果Request.UrlReferrer为null或者不是本站点下的网站,则可判断为CSRF攻击。

被攻击时为null。

正常提交数据时,可判断是否为本域名提交。

相关推荐
joke_xiaoli19 分钟前
如何重置 MySQL root 用户的登录密码?
数据库·mysql
鹏说大数据1 小时前
MySQL连接较慢原因分析及解决措施
数据库·mysql
极限实验室2 小时前
使用 INFINI Gateway 保护 Elasticsearch 集群之修改查询不合理参数(二)
数据库
竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。2 小时前
etcd客户化工具
数据库·etcd
谷晓光3 小时前
python中print函数的flush如何使用
linux·服务器·数据库
OceanBase数据库官方博客3 小时前
自然语言秒转SQL—— 免费体验 OB Cloud Text2SQL 数据查询
数据库·sql·ai·oceanbase·分布式数据库·向量·text2sql
Stark、3 小时前
【MySQL】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法
数据库·后端·sql·mysql
yqcoder3 小时前
Redis 的应用场景
数据库·redis·缓存
kngines3 小时前
【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.2成本优化与冷热数据分离
大数据·数据库·elasticsearch·搜索引擎
多多*4 小时前
浅谈Mysql数据库事务操作 用mybatis操作mysql事务 再在Springboot中使用Spring事务控制mysql事务回滚
java·数据库·windows·github·mybatis