首页 > 技术文章 > SQL注入和XSS攻击

yanshaoshuai 2019-11-17 23:36 原文

SQL注入

定义:黑客通过在请求的数据中填入特殊字符,影响服务器数据库操作程序正常执行,从而达到攻击的目的。

形式:

拼接SQL:

登录验证:前台输入 username:yan password:123’ or  1#

SQL语句:select * from user where username=’$username’ and password=’$password’

拼接后:select * from user where username=’yan ’ and password=’123’ or 1#’==>

防范:

  1. 加密(存密文,验证时穿密文) 123’ or ‘1-->0casdfh23uah15fjkj18ap

缺点:不可能对所有数据加密,除密码外其他字段也可以做手脚比如 yan’ or 1#=>’yan’ or 1#’(注释掉后面所有条件)

  1. 转义特殊字符

上述操作本质是利用了特殊字符’ 只需转义数据里的特殊字符就可以防范此类攻 击了。

123’ or  1#==>123\’ or 1

select * from user where username=’yan ’ and password=’123\’ or 1#’ //SQL报错

数字注入

用户id1的用户点击删除

Delete from user where id =1

恶意用户 发起请求传入 1 or 1==>Delete from user where id = 1 or 1 (删除所有用户数据)

  防范:将数字类型参数进行类型转换 1 or 1==>转换失败 无法执行恶意语句

 

结论:除了上面提到的用户密码验证,其他所有的请求数据都有可能成为攻击的目标,所以首先应该对所有请求数据进行安全处理,例如转义类型转换等。

XSS攻击

定义:XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括JavaVBScriptActiveXFlash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

举例

下面是一个简单的php程序,前端表单提交数据,后端直接输出用户输入的内容

form.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="xss.php" method="post">
        <input type="text" name="content" placeholder="输入内容"/>
        <input type="submit" placeholder="提交"/>
    </form>
</body>
</html><!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Title</title>

</head>

<body>

    <form action="xss.php" method="post">

        <input type="text" name="content" placeholder="输入内容"/>

        <input type="submit" placeholder="提交"/>

    </form>

</body>

</html>

xss.php

<?php
echo $_POST['content'];

 

恶意执行js:

 

输入内容:<script>alert(“你好啊”)</script>

 

 

获取cookie信息:

 

输入内容:<script>alert(document.cookie)</script>

 

破坏html页面:

 

输入内容:

<h1>XSS攻击</h1>

 

防范:

 

以上攻击的主要原理就是输入了前端代码标签侵入了前端代码,只须对<>转义就可以防范此类攻击。

<  转义成 <

>  转义成 >

 

结论: 要防范SQL注入和XSS攻击,就需要对前端发来的请求数据中的特殊字符都进行转义。(‘’和<>)

推荐阅读