Web安全防范

简单总结一下平常web开发中会出现的一些安全问题,以Flask框架为例javascript

注入攻击(Injection)

注入攻击主要包括系统命令注入,SQL注入,NoSQL注入,和ORM注入等,这里咱们简单介绍一下SQL注入java

攻击原理

在编写SQL语句时,若是直接将用户传入的输入做为参数使用字符串拼接的方式插入到SQL查询中的话,攻击者则能够利用SQL语句篡改,窃取数据库的信息。python

攻击实例

@app.route('/student')
def get_table():
    password = request.args.get('password')
    cur = db.execute('SELECT * FROM students WHERE password='%s;'
                        % password)
    results = cur.fetchall()
    return results

若是攻击者输入的值为"or 1=1--",这意味着会返回students表中的全部数据;或者输入"; drop table users; --",会删除students表中的全部数据。web

主要防范方法

  1. 使用ORM
  2. 验证输入类型
  3. 转义特殊字符

XSS攻击

XSS(Cross-Site Scripting)即跨站脚本攻击,为了不与CSS层叠样式表产生命名冲突,用X来表示Cross(交叉)数据库

攻击原理

XSS实际上是注入攻击的一种,经过将代码注入被攻击者的网站中,用户一旦访问便会执行被注入的恶意脚本。其中,XSS攻击主要分为反射型XSS攻击和存储型XSS攻击两种。跨域

攻击示例

反射型XSS攻击

反射型XSS又称为非持久型XSS,当某个站点存在XSS漏洞时,能够经过URL注入恶意脚本,当用户访问这个URL时,就会执行攻击脚本。浏览器

@app.route('hello')
def hello():
    name = request.args.get('name')
    response = '<h1>Hello, %s</h1>' % name
    return response

若是用户输入一段javascript代码,如访问http://example.com/hello/<script>alert('hahah');</script>,客户端介绍到响应后,浏览器就会执行这段代码,固然这个示例代码不会构成任何威胁,但这意味着能够执行任意的js代码,鬼知道攻击者会作些什么!安全

存储型XSS攻击

存储型XSS也被称为持久型XSS,它和反射型XSS的行为相似,不过会把植入的恶意代码存储到数据库中,如在留言区写入一段重定向代码,这会致使用户在访问留言区页面时被重定向到一些恶意站点。服务器

防范措施

  1. HTML转义
  2. 验证用户输入

CSRF攻击

CSRF(Cross Site Request Forgery)指跨域请求伪造,这是一种近年来才逐渐被大众了解的攻击方式。cookie

攻击原理

攻击者利用用户在浏览器中保存的认证信息,向对应的站点发送伪造请求。如用户登陆了A网站,认证信息保存在cookie中,当用户访问恶意网站B时,攻击者经过B网站发送一个伪造的请求提交到A网站服务器上,这会让A网站误觉得请求来自于本身的网站,从而可让攻击者成功篡改某些信息。

攻击示例

假设服务器端删除用户帐户的视图操做为

@app.route('/account/delete')
def delete_account():
    if not current_user.authenticated:
        abort(401)
    current_user.delete()
    return 'deleted!'

当用户登陆后,只要访问https://example.com/account/delete就会删除帐户,那么在攻击者的网站上,只要建立一个显示图片的img,其中的src的属性加入删除帐户的URL,当用户访问B网站时,浏览器解析网页会自动向该连接发送请求,此时你的登陆信息就保存在浏览器的cookie中,所以,仅仅是访问B网站就会致使删除帐户。

防范措施

  1. 正确使用HTTP方法
  2. CSRF令牌效验

其中CSRF令牌是比较经常使用的方法,具体作法是在表单提交中添加一些伪随机数,即CSRF令牌(token),这里咱们就不详细展开。

相关文章
相关标签/搜索