总结常见web安全问题(分享常见的12攻击类型与防御措施)第一篇
文章目录
1.明白web攻击的危害。
2.分享常见的3种攻击与对应的防御方法
1.web攻击的危害。
web攻击有什么危害呢?
程度较轻微的攻击,或许会从你的网站上窃取到用户的信息。严重的web攻击可以删库,让网站瘫痪等等严重危害。
2.分享攻击类型:sql注入,xss,csrf攻击
在此先分享3种攻击类型:sql注入,XSS攻击,csrf攻击
2.1 sql注入
什么是sql注入?
本来用户传了个id参数过来。如果我们没有预防的话,产生sql注入。
举个例子。用户传了个uid参数(用户id),一般情况下就会出现,会传一个整数,比如:1
$uid = $_GET['uid'];
//1
select * from member where id = $uid
这个sql没问题。
如果黑客故意穿uid = '1 or 1=1'
那么select * from member where id = 1 or 1=1;
就会查出所有用户的信息。这里简答举个例子,其实sql注入狠一点的还能造成更严重的问题。
在此分享两个防御措施
1.转化思路:对用户的提交的参数进行严格的过滤。
比如uid参数,我们进行整形转化。$uid = intval($_GET['uid']);
//1 or 1=1会转化为1。
框架中,用框架封装好的方法查询。不要自己写原生语句查询。框架底层会自动过滤参数,可以防止sql注入。如果有些场景要自己写原生语句时,自己一定要过滤好参数。
2.使用mysql的预处理机制(也叫参数化查询)。
其实sql注入的根本问题是mysql执行语句时,是执行一条sql后直接返回数据的。这样子,只有sql有问题,就会出现sql注入。如果拆开两条的话。
1.而且一条有sql注入的sql语句,通过预处理后就会被拆成两条没有sql注入的语句。
2.还可以有一次机会给mysql校验和转义。
比如执行了第一句预处理的sql后(`id` = :ThinkBind_1_454319113_ ),mysql就知道,你查的话是id字段,所以你第二条sql的数据,必须是数字。如果不是数字mysql就抛异常
下面以thinkphp为例子。
这样子有问题的sql,被拆成两条sql单独执行,就不会出现sql注入的问题。
比如:SELECT
id
,name
FROM uf_member
WHERE id
= 12052 or 1 = 1//拆成第一条:
SELECT `id`,`name` FROM `uf_member` WHERE`id` = :ThinkBind_1_454319113_
执行完第一条后,mysql会等待你参数的传入。 此时传入第二条sql(是一些参数)
//第二条:
array(1) {
["ThinkBind_1_454319113_"]=>
array(2) {
[0]=>
string(14) "12052 or 1 = 1"
[1]=>
int(1)
}
即使是有sql注入问题,单独运行这条sql参数的话,也不会产生什么危害。
下面是一些演示的代码
//没有进行预处理的版本,会被sql注入
header('content-type:text/html;
charset=utf-8');
$username=$_POST['username'];
$psw=$_POST['psw'];
try {
$pdo=new PDO('mysql:host=localhost;
dbname=test','root','root');
$sql="select * from user where username='{$username}' and password='{$psw}'";
$stmt=$pdo->query($sql);
//返回结果集中的行数echo
$stmt->rowCount();
} catch (Exception $e) {
echo $e->getMessage();
}//进行了预处理,可以防止sql注入
header('content-type:text/html;
charset=utf-8');
$username=$_POST['username'];
$psw=$_POST['psw'];
try {
$pdo=new PDO('mysql:host=localhost;
dbname=test','root','root');
$sql="select * from user where username=? and password=?";
$stmt=$pdo->prepare($sql);
$stmt->execute(array($username,$psw));
echo $stmt->rowCount();
} catch (Exception $e) {
echo $e->getMessage();
}
2.2 XSS(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。所以一般称把跨站脚本攻击缩写为XSS。
类似于sql注入,相当于html注入。在提交给服务器的html中,注入一段脚本。
XSS 即(Cross Site Scripting)中文名称为:跨站脚本攻击。XSS的重点不在于跨站点,而在于脚本的执行。
那么XSS的原理是:恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。那么XSS攻击最主要有如下分类:反射型、存储型、及 DOM-based型。 反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击。
举个例子,就好理解了
比如正常的用户名是张三李四啥的。如果黑客把用户名设置为“”的话,在浏览器显示用户名的时候,会一直死循话弹出输入框。还有更严重的xss脚本可以入侵数据库等。
【总结常见web安全问题(分享常见的12攻击类型与防御措施)第一篇】如果没有富文本编辑器的情况,可以使用转化的思想,用户htmlspecialchars函数,对数据进行转化。可以防止大部分xss攻击。但其实这个函数不能完全防住xss。
推荐阅读
- 7.9号工作总结~司硕
- 唱歌教学(导致嗓音损坏的几个常见的错误唱歌方法!)
- Hive常见问题汇总
- 私有化轻量级持续集成部署方案--03-部署web服务(下)
- 最有效的时间管理工具(赢效率手册和总结笔记)
- 数据库总结语句
- 周总结|周总结 感悟
- 周总结43
- 参加【21天写作挑战赛】,第七期第14天,挑战感受小总结
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了