目录介绍:
- 1、跨域有哪几种方式?
- 2、前端跳槽必备知识
- 3、SpringBoot 防止SQL注入、XSS攻击、CSRF/CROS恶意访问
- 4、CSRF, CORS,http请求头解释
- 5、11款 扫描网站安全的免费在线工具
跨域有哪几种方式?
跨源资源共享
通过 XHR 实现 Ajax 通信的一个主要限制,来源于跨域安全策略。默认情况下,XHR 对象只能访 问与包含它的页面位于同一个域中的资源。这种安全策略可以预防某些恶意行为。但是,实现合理的跨 域请求对开发某些浏览器应用程序也是至关重要的。
CORS(Cross-Origin Resource Sharing,跨源资源共享)是 W3C 的一个工作草案,定义了在必须访 问跨源资源时,浏览器与服务器应该如何沟通。CORS 背后的基本思想,就是使用自定义的 HTTP 头部 让浏览器与服务器进行沟通,从而决定请求或响应是应该成功,还是应该失败。
比如一个简单的使用 GET 或 POST 发送的请求,它没有自定义的头部,而主体内容是 text/plain。在 发送该请求时,需要给它附加一个额外的 Origin 头部,其中包含请求页面的源信息(协议、域名和端 口),以便服务器根据这个头部信息来决定是否给予响应。下面是 Origin 头部的一个示例:
如果服务器认为这个请求可以接受,就在 Access-Control-Allow-Origin 头部中回发相同的源信息(如果是公共资源,可以回发”*”)。例如:
如果没有这个头部,或者有这个头部但源信息不匹配,浏览器就会驳回请求。正常情况下,浏览器 会处理请求。注意,请求和响应都不包含 cookie 信息。
IE对CORS的实现
微软在 IE8 中引入了 XDR(XDomainRequest)类型。这个对象与 XHR 类似,但能实现安全可靠 的跨域通信。XDR 对象的安全机制部分实现了 W3C 的 CORS 规范。以下是 XDR 与 XHR 的一些不同之 处。
cookie 不会随请求发送,也不会随响应返回。
只能设置请求头部信息中的 Content-Type 字段。 不能访问响应头部信息。 只支持GET和POST请求。
这些变化使 CSRF(Cross-Site Request Forgery,跨站点请求伪造)和 XSS(Cross-Site Scripting,跨 站点脚本)的问题得到了缓解。被请求的资源可以根据它认为合适的任意数据(用户代理、来源页面等) 来决定是否设置 Access-Control- Allow-Origin 头部。作为请求的一部分,Origin 头部的值表示 请求的来源域,以便远程资源明确地识别 XDR 请求。
XDR 对象的使用方法与 XHR 对象非常相似。也是创建一个 XDomainRequest 的实例,调用 open() 方法,再调用 send()方法。但与 XHR 对象的 open()方法不同,XDR 对象的 open()方法只接收两个 参数:请求的类型和 URL。
所有 XDR 请求都是异步执行的,不能用它来创建同步请求。请求返回之后,会触发 load 事件, 响应的数据也会保存在 responseText 属性中,如下所示。
在接收到响应后,你只能访问响应的原始文本;没有办法确定响应的状态代码。而且,只要响应有 效就会触发 load 事件,如果失败(包括响应中缺少 Access-Control-Allow-Origin 头部)就会触 发 error 事件。遗憾的是,除了错误本身之外,没有其他信息可用,因此唯一能够确定的就只有请求 未成功了。要检测错误,可以像下面这样指定一个 onerror 事件处理程序。
鉴于导致 XDR 请求失败的因素很多,因此建议你不要忘记通过 onerror 事件处 理程序来捕获该事件;否则,即使请求失败也不会有任何提示。
在请求返回前调用 abort()方法可以终止请求:
与 XHR 一样,XDR 对象也支持 timeout 属性以及 ontimeout 事件处理程序。下面是一个例子。
这个例子会在运行 1 秒钟后超时,并随即调用 ontimeout 事件处理程序。
为支持 POST 请求,XDR 对象提供了 contentType 属性,用来表示发送数据的格式,如下面的例子所示。

这个属性是通过 XDR 对象影响头部信息的唯一方式。 其他浏览器对CORS的实现
Firefox 3.5+、Safari 4+、Chrome、iOS 版 Safari 和 Android 平台中的 WebKit 都通过 XMLHttpRequest 对象实现了对 CORS 的原生支持。在尝试打开不同来源的资源时,无需额外编写代码就可以触发这个行 为。要请求位于另一个域中的资源,使用标准的 XHR 对象并在 open()方法中传入绝对 URL 即可,例如:
与 IE 中的 XDR 对象不同,通过跨域 XHR 对象可以访问 status 和 statusText 属性,而且还支 持同步请求。跨域 XHR 对象也有一些限制,但为了安全这些限制是必需的。以下就是这些限制。
不能使用 setRequestHeader()设置自定义头部。
不能发送和接收 cookie。
调用 getAllResponseHeaders()方法总会返回空字符串。
由于无论同源请求还是跨源请求都使用相同的接口,因此对于本地资源,最好使用相对 URL,在访 问远程资源时再使用绝对 URL。这样做能消除歧义,避免出现限制访问头部或本地 cookie 信息等问题。
Preflighted Reqeusts
CORS 通过一种叫做 Preflighted Requests 的透明服务器验证机制支持开发人员使用自定义的头部、 GET 或 POST 之外的方法,以及不同类型的主体内容。在使用下列高级选项来发送请求时,就会向服务 器发送一个 Preflight 请求。这种请求使用 OPTIONS 方法,发送下列头部。
Origin:与简单的请求相同。
Access-Control-Request-Method:请求自身使用的方法。
Access-Control-Request-Headers:(可选)自定义的头部信息,多个头部以逗号分隔。
以下是一个带有自定义头部 NCZ 的使用 POST 方法发送的请求。
跨源资源共享
发送这个请求后,服务器可以决定是否允许这种类型的请求。服务器通过在响应中发送如下头部与 浏览器进行沟通。
Access-Control-Allow-Origin:与简单的请求相同。
Access-Control-Allow-Methods:允许的方法,多个方法以逗号分隔。
Access-Control-Allow-Headers:允许的头部,多个头部以逗号分隔。
Access-Control-Max-Age:应该将这个 Preflight 请求缓存多长时间(以秒表示)。
例如:
支持 withCredentials 属性的浏览器有 Firefox 3.5+、Safari 4+和 Chrome。IE 10 及更早版本都不 9 支持。

Preflight 请求结束后,结果将按照响应中指定的时间缓存起来。而为此付出的代价只是第一次发送 这种请求时会多一次 HTTP 请求。
支持 Preflight 请求的浏览器包括 Firefox 3.5+、Safari 4+和 Chrome。IE 10 及更早版本都不支持。
带凭据的请求
默认情况下,跨源请求不提供凭据(cookie、HTTP 认证及客户端 SSL 证明等)。通过将 withCredentials 属性设置为 true,可以指定某个请求应该发送凭据。如果服务器接受带凭据的请 求,会用下面的 HTTP 头部来响应。
如果发送的是带凭据的请求,但服务器的响应中没有包含这个头部,那么浏览器就不会把响应交给JavaScript(于是,responseText 中将是空字符串,status 的值为 0,而且会调用 onerror()事件处 理程序)。另外,服务器还可以在 Preflight 响应中发送这个 HTTP 头部,表示允许源发送带凭据的请求。
跨浏览器的CORS
即使浏览器对 CORS 的支持程度并不都一样,但所有浏览器都支持简单的(非 Preflight 和不带凭据 的)请求,因此有必要实现一个跨浏览器的方案。检测 XHR 是否支持 CORS 的最简单方式,就是检查 是否存在 withCredentials 属性。再结合检测 XDomainRequest 对象是否存在,就可以兼顾所有浏 览器了。

Firefox、Safari 和 Chrome 中的 XMLHttpRequest 对象与 IE 中的 XDomainRequest 对象类似,都 提供了够用的接口,因此以上模式还是相当有用的。这两个对象共同的属性/方法如下。
abort():用于停止正在进行的请求。
onerror:用于替代 onreadystatechange 检测错误。 onload:用于替代 onreadystatechange 检测成功。 - responseText:用于取得响应内容。
send():用于发送请求。
以上成员都包含在 createCORSRequest()函数返回的对象中,在所有浏览器中都能正常使用。
其他跨域技术
在 CORS 出现以前,要实现跨域 Ajax 通信颇费一些周折。开发人员想出了一些办法,利用 DOM 中 能够执行跨域请求的功能,在不依赖 XHR 对象的情况下也能发送某种请求。虽然 CORS 技术已经无处 不在,但开发人员自己发明的这些技术仍然被广泛使用,毕竟这样不需要修改服务器端代码。
图像Ping
上述第一种跨域请求技术是使用img标签。我们知道,一个网页可以从任何网页中加载图像,不 用担心跨域不跨域。这也是在线广告跟踪浏览量的主要方式。正如第 13 章讨论过的,也可以动态地创 建图像,使用它们的 onload 和 onerror 事件处理程序来确定是否接收到了响应。
动态创建图像经常用于图像 Ping。图像 Ping 是与服务器进行简单、单向的跨域通信的一种方式。 请求的数据是通过查询字符串形式发送的,而响应可以是任意内容,但通常是像素图或 204 响应。通过 图像 Ping,浏览器得不到任何具体的数据,但通过侦听 load 和 error 事件,它能知道响应是什么时 候接收到的。来看下面的例子。
这里创建了一个 Image 的实例,然后将 onload 和 onerror 事件处理程序指定为同一个函数。这 样无论是什么响应,只要请求完成,就能得到通知。请求从设置 src 属性那一刻开始,而这个例子在请 求中发送了一个 name 参数。
图像 Ping 最常用于跟踪用户点击页面或动态广告曝光次数。图像 Ping 有两个主要的缺点,一是只 能发送 GET 请求,二是无法访问服务器的响应文本。因此,图像 Ping 只能用于浏览器与服务器间的单向通信。
JSONP
JSONP 是 JSON with padding(填充式 JSON 或参数式 JSON)的简写,是应用 JSON 的一种新方法, 在后来的 Web 服务中非常流行。JSONP 看起来与 JSON 差不多,只不过是被包含在函数调用中的 JSON, 4 就像下面这样。
JSONP 由两部分组成:回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数。回调 函数的名字一般是在请求中指定的。而数据就是传入回调函数中的 JSON 数据。下面是一个典型的 JSONP 请求。
这个 URL 是在请求一个 JSONP 地理定位服务。通过查询字符串来指定 JSONP 服务的回调参数是很 常见的,就像上面的 URL 所示,这里指定的回调函数的名字叫 handleResponse()。
JSONP 是通过动态script元素来使用的,使用时可以为src 属性指定一个跨域 URL。这里的script元素与img元素类似,都有能力不受限制地从其他域 加载资源。因为 JSONP 是有效的 JavaScript 代码,所以在请求完成后,即在 JSONP 响应加载到页面中 以后,就会立即执行。来看一个例子。 
这个例子通过查询地理定位服务来显示你的 IP 地址和位置信息。
JSONP 之所以在开发人员中极为流行,主要原因是它非常简单易用。与图像 Ping 相比,它的优点 在于能够直接访问响应文本,支持在浏览器与服务器之间双向通信。不过,JSONP 也有两点不足。
首先,JSONP 是从其他域中加载代码执行。如果其他域不安全,很可能会在响应中夹带一些恶意代码,而此时除了完全放弃 JSONP 调用之外,没有办法追究。因此在使用不是你自己运维的 Web 服务时, 一定得保证它安全可靠。
其次,要确定 JSONP 请求是否失败并不容易。虽然 HTML5 给script元素新增了一个 onerror 事件处理程序,但目前还没有得到任何浏览器支持。为此,开发人员不得不使用计时器检测指定时间内是否接收到了响应。但就算这样也不能尽如人意,毕竟不是每个用户上网的速度和带宽都一样。
参考:javascript高级程序设计第21章
前端跳槽必备知识
http协议是一种无连接、无状态的协议
2.Hash(地址中,"#"号后面的内容,hash值改变浏览器不刷新)
3.postMessage
4.WebSocket
5.CORS(参考资料 )
1.CSRF(Cross-site request forgery)跨站请求伪造
攻击原理: 用户登录A网站,访问网站B,网站B伪造了一个指向A网站的GET请求并携带相关参数,此时浏览器会自动携带Cookie,A网站验证Cookie通过,并执行B网站伪造的GET请求。
防御措施: Token验证、Referer验证、隐藏令牌
2.XSS(Cross-site scripting)跨域脚本攻击
攻击原理: 不需要登录,利用漏洞,执行恶意脚本。
防御措施: 参考
3.两者区别
XSS向页面注入脚本,在脚本中做想做的事情;CSRF利用接口漏洞,自动执行接口(一般要求用户已登录)
参考资料:
三栏布局:
参考答案:
SpringBoot 防止SQL注入、XSS攻击、CSRF/CROS恶意访问
一、SQL 注入问题
SQL 注入即是指 web 应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在 web 应用程序中事先定义好的查询语句的结尾上添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
简单来说,就是将大部分 SQL 语句当参数传入系统中,从而获取系统中的数据。下面简单举例说明
系统中有这样一条信息 SQL 语句执行,分页查询所有用户,每页查询 20 条,并且根据指定字段进行排序,也就是说排序字段也是参数传递过来的
SQL 注入问题分析:
这样很简单的一句话 SQL,就可以把系统搞炸掉,这种方式可以实现删库跑路
以上语句会把整个 test 数据库所有内容都删掉
尽量用预编译机制,少用字符串拼接的方式传参,它是 sql 注入问题的根源。
有些特殊字符,比如:%作为 like 语句中的参数时,要对其进行转义处理。
需要对所有的异常情况进行捕获,切记接口直接返回异常信息,因为有些异常信息中包含了 sql 信息,包括:库名,表名,字段名等。攻击者拿着这些信息,就能通过 sql 注入随心所欲地攻击你的数据库了。目前比较主流的做法是,有个专门的网关服务,它统一暴露对外接口。用户请求接口时先经过它,再由它将请求转发给业务服务。这样做的好处是:能统一封装返回数据的返回体,并且如果出现异常,能返回统一的异常信息,隐藏敏感信息。此外还能做限流和权限控制。
使用 sqlMap 等待代码检测工具,它能检测 sql 注入漏洞。
需要对数据库 sql 的执行情况进行监控,有异常情况,及时邮件或短信提醒。
对生产环境的数据库建立单独的账号,只分配 DML 相关权限,且不能访问系统表。切勿在程序中直接使用管理员账号。
建立代码 review 机制,能找出部分隐藏的问题,提升代码质量。
对于不能使用预编译传参时,要么开启 druid 的 filter 防火墙,要么自己写代码逻辑过滤掉所有可能的注入关键字。
XSS 攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是 JavaScript,但实际上也可以包括 Java、 VBScript、ActiveX、 Flash 或者甚至是普通的 HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和 cookie 等各种内容。
通常情况下,被用来盗用 Cookie、破坏页面结构、重定向到其他网站等
对用户输入的表单信息进行检测过滤
CSRF - Cross-Site Request Forgery - 跨站请求伪造:
攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在未授权的情况下执行在权限保护之下的操作,CORS - Cross Origin Resourse-Sharing - 跨站资源共享,恶意访问内网敏感资源。
有效的解决办法是通过多种条件屏蔽掉非法的请求,例如 HTTP 头、参数等:
防止大规模的恶意请求,niginx 反向代理可以配置请求频率,对 ip 做限制。nginx 可以很方便地做访问控制,特别是一些偶发性的大量恶意请求,需要屏蔽处理。
屏蔽 ip 地址
屏蔽 user-agent
屏蔽代理 ip
有两种情形会需要屏蔽代理 ip:一是代理 ip 访问,二是负载均衡(real-ip 请求负载均衡服务器,再代理给后端 server)
创建 XssAndSqlHttpServletRequestWrapper 包装器,这是实现 XSS 过滤的关键,在其内重写了 getParameter,getParameterValues,getHeader 等方法,对 http 请求内的参数进行了过滤
CSRF, CORS,http请求头解释
CSRF Cross-Site Request Forgery 跨站点伪造请求 钓鱼网站通过获取用户账户信息,进行真实网站操作获取用户账户资产
CORS Cross-Origin Request 浏览器同源策略,只在浏览器内有效。在当前域名请求其他域名XHR会出现。解决方案
配置第三方响应头
access-control-allow-credentials: 是否允许cookie
access-control-allow-origin: 允许访问的域名
access-control-allow-methods: 允许访问的方法
XSS Cross-Site Scripting 脚本注入攻击。通过在打开网站注入脚本实现获取用户信息或者对服务器发起攻击
CSP Content Security Policy 内部安全测试,通过指定应被视为脚本有效来源的域,Web浏览器将仅执行从这些白名单域加载的脚本。CSP是通过Content-Security-Policy HTTP标头设置的。
HSTS HTTP Strict Transport Security 通过允许服务器声明浏览器应仅使用HTTPS连接与其不进行交互,而不能使用HTTP来防止协议降级攻击和cookie劫持。 并且浏览器应始终将所有使用HTTP的访问尝试都转换为HTTPS,例如HTTPS。 通过重写所有链接以使用HTTPS代替HTTP。 通过透明地将https连接转换为纯http来防止窃听和中间人攻击。 例如,您可能连接到机场的免费wifi服务以访问您的银行网站,但访问点实际上是黑客的笔记本电脑,该笔记本电脑会进行MITM攻击并将您重定向到该银行网站的克隆。 只要您至少通过HTTPS访问银行网站一次(并且银行使用HSTS),HSTS便会在这种情况下提供安全性,浏览器将完全拒绝此请求。 该页面包含有关为Nginx配置 HSTS的详细信息 。
HPKP HTTP Public Key Pinning HTTP公钥固定可通过为浏览器提供一组公钥来使HTTPS网站使用欺诈性获得的SSL证书来抵制假冒,这是将来可信任的唯一连接到同一来源的公钥。 与过去使用Comodo发生的情况一样,这可提供安全保护,以防止受到破坏的证书颁发机构。 在上述机场场景中,如果黑客也有从银行骗取的证书,那么仅HSTS不能保护您-但是使用HPKP,即使这种攻击也可以缓解。 这是首次使用时信任的技术。 HPKP最终将被Expect-CT标头取代。 有关HPKP的更多信息 。
Set-Cookie 这是一个相当标准的标头,到目前为止是页面上最古老的标头,但它也是正确配置最重要(也是最简单)的标头之一。 这可以通过设置一些指令来完成。 SameSite:Strict指令通过从所有跨域请求中剥离cookie来防止CSRF攻击。 Secure指令确保cookie仅在https连接中使用过-从而提供了比HPKP和HSTS更高的安全性。 HttpOnly指令确保JavaScript无法访问cookie。 通常,您将要设置所有三个。 有关Set-Cookie的更多信息
11款 扫描网站安全的免费在线工具
1. SUCURI
SUCURI is one of the most popular free website malware and security scanner. You can do a quick test for malware, blacklisting status, injected SPAM, and defacements.
SUCURI also helps to clean and protect your website from online threats and works on any website platforms, including WordPress, Joomla, Magento, Drupal, phpBB, etc.
2. Qualys
SSL Server Test by Qualys is essential to scan your website for SSL/TLS misconfiguration and vulnerabilities. It provides an in-depth analysis of your https:// URL including expiry day, overall rating, cipher, SSL/TLS version, handshake simulation, protocol details, BEAST, and much more.
As a best practice, you should run the Qualys test after making any SSL/TLS related changes.
3.Quttera
Quttera check website for malware and vulnerabilities exploits.
It scans your website for malicious files, suspicious files, potentially suspicious files, PhishTank, Safe Browsing (Google, Yandex), and Malware domain list.
4.Intruder
Intruder is a powerful cloud-based vulnerability scanner to find weaknesses in the entire web application infrastructure. It is enterprise-ready and offers government bank-level security scanning engine without complexity.
Its robust security checks include identifying:
Missing patches
Misconfigurations
Web application issues such as SQL injection cross-site scripting
CMS issues
Intruder saves you time by prioritizing results based on their context as well as proactively scanning your systems for the latest vulnerabilities. It also integrates with major cloud providers (AWS, GCP, Azure) as well as Slack Jira.
You can give Intruder a try for 30 days for free.
5. UpGuard
UpGuard Web Scan is an external risk assessment tool that uses the publicly available information to grade.
Test results are categorized into the following groups.
Website risks
Email risks
Network security
Phishing and Malware
Brand protection
Good to get a quick security posture of your website.
6.SiteGuarding
SiteGuarding helps you to scan your domain for malware, website blacklisting, injected spam, defacement, and much more. The scanner is compatible with WordPress, Joomla, Drupal, Magento, osCommerce, Bulletin, and another platform.
SiteGuarding also helps you to remove malware from your website, so if you are site is affected by viruses, they will be useful.
7.Observatory
Mozilla recently introduced observatory , which helps a site owner to check various security elements. It validates against OWASP header security, TLS best practices and performs third-party tests from SSL Labs, High-Tech Bridge, Security Headers, HSTS Preload, etc.
8.Web Cookies Scanner
Web Cookies Scanner is a free all-in-one security tool suitable for scanning web applications. It is capable of searching vulnerabilities and privacy issues on HTTP cookies, Flash applets, HTML5 localStorage, and sessionStorage, Supercookies, and Evercookies. The tool also offers a free URL malware scanner and an HTTP, HTML, and SSL/TLS vulnerability scanner.
To use this tool, you just need to enter your site’s full domain name and click on Check! After a while, you’ll get a full vulnerabilities report, showing a detail of all issues found and an overall privacy impact score.
You can use the on-demand service for free with no restrictions, or you can subscribe for a free trial of a fully automated RESTful API with different plans, which offer between 100 and unlimited API scans per month.
9.Detectify
Fully supported by ethical hackers, the Detectify domain and web application security service offers automated security and asset monitoring, being able to detect more than 1500 vulnerabilities.
Its vulnerability scanning capacity includes OWASP Top 10, CORS, Amazon S3 Bucket, and DNS misconfigurations. The Asset Monitoring service continuously monitors subdomains, searching for hostile takeovers and alerting if anomalies are detected.
Detectify offers three pricing plans: Starter, Professional, and Enterprise. All of them start with a 14-day free trial, which you can take without using a credit card.
10.Probely
Probely provides a virtual security specialist that you can add to your development crew, security team, DevOps, or SaaS business. This security specialist will scan your web application and find all of its vulnerabilities. You can think of Probely as a family doctor that gives you periodic diagnostics and tells you what to do to fix any issue.
It is a tool mainly built for developers, letting them be more independent when it comes to security testing. Its API-First development approach assures that any features will be first available on the API version of the service. It has many pricing plans, including a free one with basic scanning capacity.
11.Pentest-Tools
The website vulnerability scanner is one of a comprehensive set of tools offered by Pentest-Tools that comprise a solution for information gathering, web application testing, CMS testing, infrastructure testing, and SSL testing. In particular, the website scanner is designed to discover common web application vulnerabilities and server configuration issues.
The company offers a Light version of the tool, which performs a passive web security scan. It is capable of detecting many vulnerabilities, including insecure cookie settings, insecure HTTP headers, and outdated server software. You can perform up to 2 free, full scans of your website to get a comprehensive assessment. The results will tell you about vulnerabilities such as local file inclusion, SQL injection, OS command injection, XSS, between others.
This document is mainly from the below URL...Just changed a few picture(from my testing).
网友评论
最新评论
a free trial of a fully automated RESTful API with different plans, which offer between 100 and unlimited API scan
头、参数等: 防止大规模的恶意请求,niginx 反向代理可以配置请求频率,对 ip 做限制。nginx 可以很方便地做访问控制,特别是一些偶发性的大量恶意请求,需要屏蔽处理。 屏蔽 ip 地址 屏蔽 user-agent 屏蔽代理 ip
rome。IE 10 及更早版本都不 9 支持。Preflight 请求结束后,结果将按照响应中指定的时间缓存起来。而为此付出的代价只是第一次发送 这种请求时会多一次 HTTP 请求。支持 Preflig
SSL Server Test by Qualys is essential to scan your website for SSL/TLS misconfiguration and vulnerabilities. It provides an