SQL注入就是指web 应用程序对用户输入的数据合法性没有过滤或者判断,前端传入的参数式攻击者可以控制,并且参数带入数据库的查询,攻击者可以通过构造恶意的sql语句来实现对数据库的任意操作
分类:
1.报错注入
2.bool注入
3.延迟注入
4.宽字节注入
5.堆叠注入
6.联合查询
1.获取数据库名
select schema name from information schema.schemata
2.获取表名
select table name from information schema.tables
3.获取字段名
select * from information schema.columns where table nameand table schema = "security"users"
4.获取数据
select id,username,password from users
在开发web应用程序时,开发人员往往只关注web应用程序所需的功能,所以常常会建立自定义认证和会话方案。但是要正确的是西安这些方却是很难得。结果就在退出,密码股那里,超市,密码找回,账户更新等方面存在漏洞。
1.区分公共区域和受限区域
2.对最终用户账户使用账户锁定策略
3.支持密码有限期
4.能够禁用账户
5.不要储存用户密码
6.要求使用强密码
7.不要在网络上以纯文本形式发送密码
8.保护身份验证cookie
9.使用SSL保护会话身份验证Cookie10。
10.对身份验证cookie得内容进行加密
11.限制会话寿命
12.避免未经授权访问会话状态
XSS是跨站脚本攻击,
是攻击者向有XSS漏洞得网站重输入恶意得HTML代码,当其他用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的分类: 反射型 (非持久型) XSS,存储型 (持久型) XSS,DOM型Xss
DOM XSS和反射XSS,存储型XSS的差别在于DOM XSS的代码并不需要服务器的参与,触发XSS靠的是浏览器端的DOM解析。什么是 HttpOnly?
如果在cookie中设置了httpOnly属性,那么通过is脚本将无法读取到cookie信息,这样能有效的防止XSS攻击预防:
1.使用XSS Filter,即跨站脚本过滤器,用于分析用户提交的输入并过滤可能存在的脚本攻击及恶意的HTML或简单的HTML格式错误
2.输入过滤
输入是否仅仅包含合法的字符输入字符串是否超过最大长度限制输入如果为数字,数字是否存在指定的范围输入是否符合特殊的格式的要求,如果IP地址 E-mail地址等
3.输出编码
(小于号) 转成 <
(大于号) 转成 >
Dirae
(和符号) 转成 &
(双引号) 转成 "
(单号) 转成 '
4.黑名单和白名单
5.内容安全策略(csp): CSP 用于限制浏览器查看页面,一边它只能使用从受信任来源下载的资源
不安全的直接对象引用 (IDOR) 允许攻击者绕过网站的身份验证机制,并通过修改指向对象连接中的参数值来直接访问目标对象的资源,这类资源可以是属于其他用户的数据库条目以及服务器系统中的隐私文件等等
web应用往往在生成web页面时会用它的真实名字,并且不会对所有额目标对象访问时来检查用户权限,所以这就造成了不安全的对象直接引用的漏洞
服务器上的具体文件名,路径或数据库关键字等内部资源被暴漏在URL或网页中,攻击者可以尝试直接访问其他资源
1.使用基于用户或者会话的间接对象访问,这样可防止攻击者直接攻击未授权资源
2.访问检查:对任何来自不受信源使用的所有对象进行访问控制检查
3.避免在url或网页中直接引用内部文件名或数据库关键字
4.验证用户输入和url请求,拒绝包含.../的请求
安全配置错误可以发生在一个应用程序堆栈的任何层面,通常是由于不安全的默认配置、不完整的临时配置、开源云存储、:错误的HTTP标头配置以及包含敏感信息的详细错误信息所造成的。
攻击者能够通过未修复的漏洞、访问默认账户、不再使用的页面、未受保护的文件和目录等来取得对系统的未授权的访问或了解
1、配置所有的安全机制
2、最小原则,关掉或限制不使用的服务
3、更改默认账户信息
4、使用日志和警报
5、回显信息不显示任何与实际错误相关的信息
6、检查和修复安全配置项
由于管理员或者技术人员等各种原因导致敏感信息泄露。许多web应用程序和app都无法正确保护敏感数据,攻击者可以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为。未加密的敏感数据容易受到破坏,因此,我们需要对敏感数据加密,这些数据包括: 传输过程中的数据、存储的数据以及浏览器的交互数据
1、手工挖掘,查看web容器或网页源码代码,可能存在敏感信息。比如访问url下的目录,直接列出了目录下的文件列表,错误的报错信息包含了网站的信息
2、工具挖掘,像爬虫之类的工具可以扫描到敏感文件路径,从而找到敏感数据
1、 对系统处理、存储或传输的数据进行分类,根据分类进行访问控制
2、对用户敏感信息的传输和存储进行加密
3、强化安全意识
大多数Web应用程序的功能在UI页面显示之前,会验证功能级别的访问权限。但是,应用程序需要在每个功能被访问时在服务器端执行相同的访问控制检查。如果请求没有被验证,攻击者能够伪造请求从而在未经适当授权时访问功能。
1、保证合法授权用户可以访问成功
2、限制非法未授权用户的访问
1、设计严格的权限控制系统,对于每个请求和URL都要进行校验和权限确认,防止非法请求被执行
2、对于每个功能的访问,都要有明确的角色授权,采用过滤器的方式校验每个请求的合法性
3、实现Web访问的IP白名单列表,禁止不可信的IP访问Web系统
CSRF跨站点请求伪造(Cross--Site Request Forgery),跟XSS攻击样,存在巨大的危害性,你可以这样来理解: 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。 如下: 其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户
CSRF攻击攻击原理及过程如下
1.用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A,
3.用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
4.网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A
5.浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
GET型和POST型
1、验证 HTTP Referer 字段。
根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址
2、在请求地址中添加
token 并验证在HTTP请求中以参数的形式加入一个随机产生的token (随机字符串),并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。
3、二次验证
在转账等关键操作之前提供当前用户的密码或者验证码。二次验证可以有效防御CSRF 攻击
大多数的开发团队并不会把及时更新组件和库当成他们的工作重心更不关心组件和库的版本,然而应用程序使用带有已知漏洞的组件会破坏应用程序防御系统,可能导致严重的数据丢失或服务器接管
1.标识正在使用的所有组件和版本,包括所有依赖项
2.及时关注这些组件的安全信息并保证他们是最新的
3.建立使用组件的安全策略,禁止使用未经安全评估的组件
4.在适当情况下,对组件进行安全封装,精简不必要的功能,封装易受攻击部分。
告诉浏重定向是服务端根据逻辑,发送一个状态码 (通常为3xx)览器重新去请求那个地址.所以地址栏显示的是新的URL。(重定向是在客户端完成的)
转发是在服务器内部将请求转发给另一个资源,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,因为这个跳转过程是在服务器实现的,并不是在客户端实现的所以客户端并不知道这个跳转动作,所以它的地址栏还是原来的地址。(转发是在服务器端完成的)
1、重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址。
2、重定向有两次请求,不共享数据,转发是有一次请求且共享数动
3、重定向后地址栏会发生变化,转发不会
4、重定向的地址可以是任意地址,转发的地址只能是当前应用类的某一个地址。
预防措施
1、重定向外部网站需要验证是否在白名单
2、转发内部网站要验证是否有权限,有权限才转发