理解什么是sql注入攻击 + xss攻击 + cors 攻击

news2025/2/25 20:51:48

SQL注入

SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
SQL注入攻击的总体思路:

  • 寻找到SQL注入的位置
  • 判断服务器类型和后台数据库类型
  • 针对不同的服务器和数据库特点进行SQL注入攻击

SQL注入攻击实例:
比如,在一个登录界面,要求输入用户名和密码,可以这样输入实现免帐号登录:

用户名: ‘or 1 = 1 --
密 码:

用户一旦点击登录,如若没有做特殊处理,那么这个非法用户就很得意的登陆进去了。这是为什么呢?
下面我们分析一下:从理论上说,后台认证程序中会有如下的SQL语句:

String sql = “select * from user_table where username=’ “+userName+” ’ and password=’ “+password+” ‘”;

因此,当输入了上面的用户名和密码,上面的SQL语句变成:

SELECT * FROM user_table WHERE username=’’or 1 = 1- and password=’’

分析上述SQL语句我们知道,username=‘ or 1=1 这个语句一定会成功;然后后面加两个 -,这意味着注释,它将后面的语句注释,让他们不起作用。这样,上述语句永远都能正确执行,用户轻易骗过系统,获取合法身份。

如何应对:

  • 参数绑定
    使用预编译手段绑定参数是最好的防SQL注入的方法。目前许多的ORM框架及JDBC等都实现了SQL预编译和参数绑定功能,攻击者的恶意SQL会被当做SQL的参数而不是SQL命令被执行。在mybatis的mapper文件中,对于传递的参数我们一般是使用 # 和$来获取参数值。
    当使用#时,变量是占位符 ,就是一般我们使用javajdbc的PrepareStatement时的占位符,所有可以防止sql注入;当使用 $ 时,变量就是直接追加在sql中,一般会有sql注入问题。
  • 使用正则表达式过滤传入的参数

XSS攻击

它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。
XSS的攻击方式就是想办法“教唆”用户的浏览器去执行一些这个网页中原本不存在的前端代码。
我们常用的留言板就可以产生XSS攻击(持久性),我们知道留言板通常的任务就是把用户留言的内容展示出来。
正常情况下,用户的留言都是正常的语言文字,留言板显示的内容也就没毛病。然而这个时候如果有人不按套路出牌,在留言内容中丢进去一行:

<script>alert(“这是一个攻击”)</script>

那么留言板界面的网页代码就会变成形如以下:

那么这个时候问题就来了,当浏览器解析到用户输入的代码那一行时会发生什么呢?答案很显然,浏览器并不知道这些代码改变了原本程序的意图,会照做弹出一个信息框。就像这样:

<html>
    <head>
       <title>留言板</title>
    </head>
<body>
<div id=”board” 
        <script>alert(“这是一个攻击”)</script>
</div>     
    </body>
</html>

非持久 XSS攻击:攻击者注入的数据反映在响应中,一个典型的非持久性XSS攻击包含一个带XSS攻击向量的链接(每次攻击需要用户点击),比如:
正常发送消息:

http://www.test.com/message.php?send=Hello,World

非正常发送消息:
接收者接收消息显示的时候将会弹出警告窗口

http://www.test.com/message.php?send=<script>alert(‘foolish!)</script>

XSS攻击的主要原因就是过于信任客户端提交的数据。
解决方法是不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理然后方可进行下一步的操作。
解决的具体方案:

  • 将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie了(如果在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击);
  • 表单数据规定值的类型,例如:年龄应为只能为int、name只能为字母数字组合
  • 对数据进行Html Encode 处理(对HTML转义)
  • 过滤或移除特殊的Html标签,例如: < script >, < iframe > , < for <, > for>, ” for
  • 过滤JavaScript 事件的标签,例如 “οnclick=”, “onfocus” 等等
    **需要注意的是:**在有些应用中是允许html标签出现的,甚至是javascript代码出现。因此,我们在过滤数据的时候需要仔细分析哪些数据是有特殊要求(例如输出需要html代码、javascript代码拼接、或者此表单直接允许使用等等),然后区别处理!

CORS攻击

CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
Cors漏洞就是攻击者利用Cors技术来获取用户的敏感数据,从而导致用户敏感信息泄露。
CORS请求可分为两类:

  • 简单请求:请求方式为GET,POST,HEAD这三种之一,并且HTTP头不超出(Accept,Accept-Language,Content-Language,Lat-Event-ID,Content-Type)这几种字段。
    Origin字段用来说明,本次请求来自哪个源(协议 + 域名 + 端口)
GET /cors HTTP/1.1
Origin: http://api.bob.com
Host: api.alice.com
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0

当浏览器发现服务器的请求为简单请求时,会在头信息里加入Origin字段Origin字段代表此次请求来自哪个域服务器就可以检验是否来自该域。如果匹配,服务器就会在响应里增添三个字段:
1.Access-Control-Allow-Origin
2.Access-Control-Allow-Credentials
3.Access-Control-Expose-Headers
其中 Access-Control-Allow-Origin是必须有的,而剩下两个可有可无。Access-Control-Allow-Origin字段代表允许哪个域访问。当字段值为‘*’时,就代表任意域都可以访问,这样,就导致了Cors漏洞的产生(可被截取到用户信息)。
在这里插入图片描述

  • 非简单请求:非简单请求是那种对服务器有特殊要求的请求,比如请求方法是PUT或DELETE,或者Content-Type字段的类型是application/json。
    非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)
    浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。
    解决:
    1.不要将Access-Control-Allow-Origin字段设置为*
    2.严格校验Origin字段的值
    3.HTTPS 网站不要信任HTTP 域
    4.不要信任全部自身子域,减少攻击面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/427394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cookie和Session的工作流程及区别(附代码案例)

目录 一、 HTTP协议 1.1 为什么HTTP协议是无状态的&#xff1f; 1.2 在HTTP协议中流式传输和分块传输编码的区别 二、Cookie和Session 2.1 Cookie 2.2 Session 2.3 Cookie和Session的区别 三、servlet中与Cookie和Session相关的API 3.1 HttpServletRequest 类中的相关方…

CSRF漏洞的概念、利用方式、防御方案

CSRF漏洞1.CSRF的概念1.1 什么是CSRF&#xff1f;1.2 基本攻击流程2.CSRF攻击实现2.1 靶场练习2.2 CSRFXSS组合拳2.2.1 攻击页面部署2.2.2 构造恶意xss语句&#xff0c;实现重复生效的CSRF3. CSRF攻击的防御**3.1 只使用JSON API****3.2 验证HTTP Referer字段****3.3 在请求地址…

【Spring源码】Spring事务原理

目录 1、什么是事务 2、Spring事务基本概念 2.1、基础配置 2.1.1、Spring事务的基础配置 2.1.2、Spring事务的传播特性 2.1.3、Spring事务的隔离级别 2.2、基本原理 3、事务嵌套 3.1、PROPAGATION_REQUIRED 3.2、PROPAGATION_REQUIRES_NEW 3.3、PROPAGATION_SUPPORTS…

【时序论文小集】

目录【2021 NeurIPS】Autoformer: Decomposition Transformers with Auto-Correlation for Long-Term Series Forecasting【2022 ICML】FEDformer: Frequency Enhanced Decomposed Transformer for Long-term Series Forecasting【2023 ICLR】TIMESNET: TEMPORAL 2D-VARIATION …

【云原生】k8s NetworkPolicy 网络策略是怎么样的

前言 随着微服务的流行&#xff0c;越来越多的云服务平台需要大量模块之间的网络调用。 在 Kubernetes 中&#xff0c;网络策略(NetworkPolicy)是一种强大的机制&#xff0c;可以控制 Pod 之间和 Pod 与外部网络之间的流量。 Kubernetes 中的 NetworkPolicy 定义了一组规则&…

FastAPI: 极速开发Python Web应用的未来之星

我在工作中经常使用Flask来开发Web应用。但是随着项目规模的增长&#xff0c;我发现自己需要写越来越多的重复代码&#xff0c;同时Flask并没有提供一个良好的数据验证和文档生成工具。 有一天&#xff0c;我听说了一个名为FastAPI的框架&#xff0c;它被誉为是Python Web框架…

S型加减速速度给定功能块(SCL+ST+梯形图)

S型加减速详细算法公式请参看下面博客文章,这里不再赘述: 博途PLC1200/1500PLC S型速度曲线变频器控制应用(SCL完整源代码)_RXXW_Dor的博客-CSDN博客PLC运动控制基础系列之梯形速度曲线,可以参看下面这篇博客:PLC运动控制基础系列之梯形速度曲线_RXXW_Dor的博客-CSDN博客运…

SQLServer 的事件通知

事件通知一、背景知识1.1、事件通知的好处1.2、事件通知概念1.3、事件通知与触发器二、实现事件通知2.1、创建目标服务2.2、创建事件通知三、为事件通知配置对话安全性总结一、背景知识 事件通知将有关事件的信息发送到服务代理服务。通过将有关这些事件的信息发送到服务代理服…

新买的电脑,设置电脑

设置电脑自动清理垃圾 开机后&#xff0c;需要首先设置好让电脑自动定期为你清理垃圾。具体的方法也很简单&#xff0c;右击桌面&#xff0c;找到显示设置。 图片进入后依次点开“储存”-“储存感知”-“配置储存感知立即运行”&#xff0c;设置为“每天”&#xff0c;然后下方…

《花雕学AI》01:尝试使用新必应制作《雕爷学编程》的栏目介绍

跨年头尾三个月&#xff0c;花雕走完塔克拉玛干沙漠回来后&#xff0c;突然发现世界变了&#xff0c;微软投资的ChatGPT火起来了&#xff0c;特别是升级的ChatGPT4.0&#xff0c;更是异常火热&#xff01;这一个多月来&#xff0c;人工智能AI突然爆发&#xff0c;能做的事情太多…

深度学习中的目标识别

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…

干翻Hadoop系列文章【03】:MapReduce概念详解

引言 数据存储在分布式文件系统中HDFS里边&#xff0c;通过使用Hadoop资源管理系统YARN&#xff0c;Hadoop可以将MapReduce计算&#xff0c;转移到有存储部分的数据的各台机器上。 一&#xff1a;概念和原理 1&#xff1a;MapReduce作业 MapReduce作业被称为一个工作单元。…

基于SpringBoot+微信小程序的壁纸小程序

基于SpringBoot微信小程序的壁纸小程序 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景…

Springboot高级(一)缓存

一、缓存结构 二、注解 三、体验缓存 1、开启缓存 EnableCaching SpringBootApplication EnableCaching public class SpringbootCacheApplication {2、标志注解 &#xff08;1&#xff09;Cacheable Cacheable(value "emp", condition "#id2", unless…

【李老师云计算】实验一:Hadoop伪分布式集群部署与Eclipse访问Hadoop进行单词计数统计

索引前言实验内容1. 安装虚拟机1.1 安装与激活1.2 ★解决使用虚拟机蓝屏(绿屏)2. 安装CentOS2.1 下载CentOS2.2 VMware新建虚拟机2.3 安装CentOS(包括GUI、主机名)2.4 ★解决已经创建虚拟机改主机名3. VMWare 网络配置3.0 使用VI编辑器和VMware3.0.1 使用VI编辑器3.0.2 使用VMw…

SQL Server 数据操控,视图和索引

文章目录前言1.在student表中插入一行新记录&#xff0c;学号为&#xff0c;姓名为胡明月&#xff0c;性别为男&#xff0c;年龄为&#xff0c;系部为CS2.在student表中插入一条新记录&#xff0c;学号为&#xff0c;姓名为李红&#xff0c;性别为女3.将胡明月的年龄修改为194.…

R语言实践——ggplot2+ggrepel绘制散点+优化注释文本位置

简介 书接adjustText实践——调整matplotlib散点图标签&#xff0c;避免重复 上文中&#xff0c;matplotlibadjustText对于我的实例来说并没有起到很好的效果。所以&#xff0c;博主决定在R中利用gglot2ggrepel绘制&#xff0c;期待效果。 操作过程 博主不常使用R&#xff…

尚融宝14-集成redis缓存

目录 一、简介 1、场景 2、RedisTemplate 二、引入Redis 1、项目中集成Redis 2、添加Redis连接配置 3、启动Redis服务 三、测试RedisTemplate 1、存值测试 2、Redis配置文件 3、取值测试 四、将数据字典存入redis 一、简介 1、场景 由于数据字典的变化不是很频繁&#xff0c;而…

Unity 热更新技术 | (四) Lua语言基本语法及关键知识介绍

🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 🌲Unity实战100例专栏推荐:Unity 实战100例 教程 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬…

python ——批量读取相同格式文件(多个文件夹/单个文件夹)---nc文件为例

在处理多个相同格式的文件时&#xff0c;python中的许多模块可以为我们提供很多遍历。 比如&#xff0c;我们想读取一个文件夹下多个相同格式的文件时 可以使用os模块&#xff0c; import os以下有几个常见用法&#xff1a; 1、os.path.abspath(path) #返回绝对路径 2、os.pat…