• XXS, CSRS 以及SQL注入 三大安全详解,如何防御


    程序员需要掌握基本的web安全知识,防患于未然,你们知道有多少种web安全漏洞吗?这里不妨列举10项吧,你们可以自己去网站找相应的教程来提升自己的
    1、命令注入(Command Injection)
    2、eval注入(Eval Injection)
    3、客户端脚本攻击(Script Insertion)
    4、跨网站脚本攻击(Cross Site Scripting, XSS)
    5、SQL注入攻击(SQL injection)
    6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)
    7、Session 会话劫持(Session Hijacking)
    8 Session  会话固定(Sessionfixation)
    9、HTTP响应拆分攻击(HTTP Response Splitting)

    10、文件上传漏洞(File Upload Attack)

    这篇文章主要给大家介绍最经常遇到的3个:XXS,CSRF, SQL注入。

    一、XSS漏洞

    1.XSS简介

    XSS(Cross Site Scripting),意为跨网站脚本攻击,为了和样式表css(Cascading Style Sheet)区别,缩写为XSS

    跨站脚本主要被攻击者利用来读取网站用户的cookies或者其他个人数据,一旦攻击者得到这些数据,那么他就可以伪装成此用户来登录网站,获得此用户的权限。

    跨站脚本攻击的一般步骤

    1、攻击者以某种方式发送xss的http链接给目标用户

    2、目标用户登录此网站,在登陆期间打开了攻击者发送的xss链接

    3、网站执行了此xss攻击脚本

    4、目标用户页面跳转到攻击者的网站,攻击者取得了目标用户的信息

    5、攻击者使用目标用户的信息登录网站,完成攻击

    2.XSS攻击的危害

    1、盗取用户资料,比如:登录帐号、网银帐号等

    2、利用用户身份,读取、篡改、添加、删除企业敏感数据等

    3、盗窃企业重要的具有商业价值的资料

    4、非法转账

    5、强制发送电子邮件

    6、网站挂马

    7、控制受害者机器向其它网站发起攻击

    图片

    3.防止XSS解决方案

    XSS的根源主要是没完全过滤客户端提交的数据 ,所以重点是要过滤用户提交的信息。

    • 将重要的cookie标记为http only, 这样的话js 中的document.cookie语句就不能获取到cookie了.

    • 只允许用户输入我们期望的数据。例如:age用户年龄只允许用户输入数字,而数字之外的字符都过滤掉。

    • 对数据进行Html Encode 处理:用户将数据提交上来的时候进行HTML编码,将相应的符号转换为实体名称再进行下一步的处理。

    • 过滤或移除特殊的Html标签, 例如: <script>, <iframe> , < for <, > for >, &quot for

    • 过滤js事件的标签。例如 "onclick=", "onfocus" 等等。

    CSRF攻击(跨站点请求伪造)

    1.CSRF简介

    CSRF(Cross Site Request Forgeries),意为跨网站请求伪造,也有写为XSRF。攻击者伪造目标用户的HTTP请求,然后此请求发送到有CSRF漏洞的网站,网站执行此请求后,引发跨站请求伪造攻击。攻击者利用隐蔽的HTTP连接,让目标用户在不注意的情况下单击这个链接,由于是用户自己点击的,而他又是合法用户拥有合法权限,所以目标用户能够在网站内执行特定的HTTP链接,从而达到攻击者的目的。

    2.CSRF攻击的危害

    主要的危害来自于,攻击者盗用了用户身份,发送恶意请求。比如:模拟用户的行为发送邮件,发消息,以及支付、转账等财产安全。

    例如:某个购物网站购买商品时,采用http://www.shop.com/buy.php?item=watch&num=1,item参数确定要购买什么物品,num参数确定要购买数量,如果攻击者以隐藏的方式发送给目标用户链接

    那么如果目标用户不小心访问以后,购买的数量就成了1000个。

     

    3.防止CSRF的解决方案

    • 重要数据交互采用POST进行接收,当然是用POST也不是万能的,伪造一个form表单即可破解。

    • 使用验证码,只要是涉及到数据交互就先进行验证码验证,这个方法可以完全解决CSRF。但是出于用户体验考虑,网站不能给所有的操作都加上验证码。因此验证码只能作为一种辅助手段,不能作为主要解决方案。

    • 验证HTTP Referer字段,该字段记录了此次HTTP请求的来源地址,最常见的应用是图片防盗链。

    • 为每个表单添加令牌token并验证。

    三、SQL注入攻击(SQL injection)

    1 SQL注入

    所谓的SQL注入攻击,即一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据。

    SQL注入攻击(SQL Injection),是攻击者在表单中提交精心构造的sql语句,改动原来的sql语句,如果web程序没有对提交的数据经过检查,那么就会造成sql注入攻击。

    2 SQL注入攻击的一般步骤:

    1、攻击者访问有SQL注入漏洞的站点,寻找注入点

    2、攻击者构造注入语句,注入语句和程序中的SQL语句结合生成新的sql语句

    3、新的sql语句被提交到数据库中执行处理

    4、数据库执行了新的SQL语句,引发SQL注入攻击

    3 防止SQL注入的方式

    通常情况下,SQL注入的位置包括:

    (1)表单提交,主要是POST请求,也包括GET请求;

    (2)URL参数提交,主要为GET请求参数;

    (3)Cookie参数提交;

    (4)HTTP请求头部的一些可修改的值,比如Referer、User_Agent等;

    4.简要举例

    举一个简单的例子,select * from user where id=100 ,表示查询id为100的用户信息,如果id=100变为 id=100 or 2=2,sql将变为:select * from user where id=100 or 2=2,将把所有user表的信息查询出来,这就是典型的sql注入。

    5.防止SQL注入的解决方案

    1)对用户的输入进行校验,使用正则表达式过滤传入的参数

    2)使用参数化语句,不要拼接sql,也可以使用安全的存储过程

    3)不要使用管理员权限的数据库连接,为每个应用使用权限有限的数据库连接

    4)检查数据存储类型

    5)重要的信息一定要加密

  • 相关阅读:
    第37天新版动画系统和有限状态机
    第36天旧版动画系统
    第35天2D游戏相关
    第34天协同程序和异步加载
    第33天力、射线检测、球形检测和延迟函数
    第32天Line渲染器,物理系统和力
    第31天Camera组件和灯光组件
    第29天动态加载、对象池
    第28天3D数学
    第27天3D数学
  • 原文地址:https://www.cnblogs.com/csjoz/p/15266003.html
Copyright © 2020-2023  润新知