安全测试知识

本文详细介绍了SQL注入的原理,如恶意拼接查询、利用注释执行非法命令和传入非法参数,以及如何避免这些攻击,包括过滤输入内容、参数化查询和限制数据库权限等。同时,讲解了XSS跨站脚本攻击,分为反射型和存储型,强调了预防措施,如HTML实体转码和使用事件属性黑名单。通过学习,读者将能更好地理解和防御这两种常见Web安全威胁。
摘要由CSDN通过智能技术生成

学习目标:

  • sql注入原理及如何避免sql注入
  • XSS跨站点脚本攻击原理以及如何避免

学习内容:

sql注入的原理(攻击者利用客户端用户输入字符串后面加入sql语句,如果程序在设计时忽略了检查,那么注入的sql语句就会被数据库误认为是正常的sql语句而运行,以此达到欺骗数据库来查询,进一步获取到数据信息)

  •  恶意拼接查询    SELECT * FROM users WHERE user_id = $user_id。user_id 是传入的参数,如果传入的参数值为“1234; DELETE FROM users”。那么最终执行语句就会变成删除users表中的所有数据。
  • 利用注释执行非法命令  SELECT COUNT(*) AS 'num' FROM game_score WHERE game_id=24411 AND version=$version。如果 version 包含了恶意的字符串'-1' OR 3 AND SLEEP(500)--,那么最终查询语句会变为一直在查询中,如果添加了修改,删除等恶意指令,那么将会造成更大的破坏。

  • 传入非法参数  SQL 语句中传入的字符串参数是用单引号引起来的,如果字符串本身包含单引号而没有被处理,那么可能会篡改原本 SQL 语句的作用。

  • 添加额外条件 UPDATE users SET userpass='$userpass' WHERE user_id=$user_id;如果user_id 被传入恶意的字符串“1234 OR TRUE”,那么最终的 SQL 语句会变为:UPDATE users SET userpass= '123456' WHERE user_id=1234 OR TRUE; 这将更改所有用户的密码。

如何避免sql注入

  • 过滤输入内容,校验字符串(在数据提交到数据库之前,把用户输入中不合法的字符去除)

  • 参数化查询(将数据值设置成参数)

  • 安全测试、安全审计(定期进行扫描安全漏洞)

  • 避免使用动态SQL(避免将用户输入的数据直接放进sql语句中)

  • 不要将敏感数据保留在纯文本中(不要将敏感数据保留在纯文本中)

  • 限制数据库权限和特权

  • 避免直接向用户显示数据库

XSS跨站点脚本攻击的原理

  • 在Web页面中插入恶意javascript代码(也可能包含html代码),当用户浏览网页之时,嵌入其中Web里面的javascript代码会被执行,从而达到恶意攻击用户的目的。XSS是攻击客户端,最终受害者是用户。
  • xss漏洞关键就是寻找参数未过滤的输出函数
  • 两种情况。一种通过外部输入然后直接在浏览器端触发,即反射型XSS;还有一种则是先把利用代码保存在数据库或文件中,当web程序读取利用代码并输出在页面上时触发漏洞,即存储型XSS。DOM型XSS是一种特殊的反射型XSS。

如何检测跨站点脚本攻击:

  • 黑盒测试时:只需要将尖括号、单双引号等提交到web服务器,检查返回的html页面里面有没有保留原来的特殊字符即可判断;
  • 白盒测试时:只需寻找带有参数的输出函数,然后根据输出函数对输出的内容回溯输入参数,观察有没有过滤;

如何预防跨站点脚本攻击:

  • 特殊字符HTML实体转码。最好的过滤方式是在输出和二次调用的时候进行加HTML实体一类的转码,防止脚本注入。
  • 标签事件属性黑名单。特殊字符容易被绕过,所以还得加标签事件得黑名单或者白名单,这里推荐使用白名单的方式,实现规则可以直接使用正则表达式来匹配,如果匹配到的事件不在白名单列表,就可以直接拦截,而不是过滤为空。

学习内容来源:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值