XSS,CSRF,SSRF简述

cookie和session

http是一种无状态的协议,所以客户端每次发出请求时,下一次请求无法得知上一次请求所包含的状态数据,也就是说影响我们浏览资源的交互性体验变差。

比如我们登录后台管理页面,当我们已经在登录状态下,每次在更换功能点就不用在每次都要进行登录。从而大大提升我们使用体验

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗 考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、所以个人建议: 将登陆信息等重要信息存放为SESSION 其他信息如果需要保留,可以放在COOKIE中

session和cookie差不多,只是session是写在服务器端的文件,也需要在客户端写入cookie文件,但是文件里是你的浏览器编号.Session的状态是存储在服务器端,客户端只有session id;而Token的状态是存储在客户端。

Token

token的意思是“令牌”,是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查。

XSS跨站脚本攻击

 

反射型XSS攻击

反射型XSS通过将恶意脚本注入到应用程序中的输入数据中,然后将该数据“反射”回给用户,从而使用户的浏览器执行恶意脚本。这种漏洞通常发生在应用程序未正确过滤或转义输入数据的情况下。

要防止反射性XSS漏洞,你可以采取以下措施:

  1. 对输入数据进行严格的验证和过滤,确保不允许插入恶意脚本。

  2. 使用合适的编码来转义输出数据,如HTML编码、JavaScript编码等。

  3. 在开发过程中,避免直接将用户提供的数据插入到页面内容中,而是通过模板引擎或专门的输出函数进行输出。

  4. 使用HTTP标头中的内容安全策略(CSP)来帮助减少XSS攻击的风险。

反射型:与服务端交互,但是交互的数据一般不会被存在数据中,是一次性,所见即所得一般出现在查询类页面

存储型:与数据库交互,永久性的,一般出现在留言板,注册等页面

DOM型:不与后台服务器数据交互,是一种通过DOM操作前端代码输出的时候产生的漏洞,大部分属于反射型,少部分属于存储型

举例

执行恶意脚本

<script>alert(document.cookie)</script>

 

获取用户名密码脚本

将xss程序放到网站根目录并命名为auth.php:

<?php
// check if the form was submitted
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  // get the username and password from the form
  $username = isset($_POST['username']) ? $_POST['username'] : "";
  $password = isset($_POST['password']) ? $_POST['password'] : "";

  // check if the credentials are valid
  if ($username === 'jksdyf7y3748723@#@%' && $password === 'jksdyf7y3748723@#@%') {
    // redirect to the dashboard or homepage
    header('Location: dashboard.php');
    exit;
  } else {
    // redirect back to the login page with an error message
    $error_message = 'Invalid username or password. Please try again.';
    header('Location: auth.php?error=' . urlencode($error_message));
    exit;
  }
}
?>

<!DOCTYPE html>
<html lang="en">
<head>

  <title>Login</title>
  <style>
    body {
      font-family: sans-serif;
      background-color: #f1f1f1;
      padding: 20px;
    }

    form {
      background-color: #fff;
      border-radius: 5px;
      box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
      padding: 20px;
      max-width: 400px;
      margin: 0 auto;
    }

    label {
      display: block;
      font-weight: bold;
      margin-bottom: 5px;
    }

    input[type="text"],
    input[type="password"] {
      border: 1px solid #ccc;
      border-radius: 3px;
      padding: 5px;
      width: 100%;
      margin-bottom: 10px;
      box-sizing: border-box;
    }

    button[type="submit"] {
      background-color: #007bff;
      color: #fff;
      border: none;
      border-radius: 3px;
      padding: 10px 20px;
      cursor: pointer;
    }

    button[type="submit"]:hover {
      background-color: #0069d9;
    }

    .error {
      color: #f44336;
      margin-top: 10px;
    }
  </style>
</head>
<body>


  <form action="auth.php" method="post">
    <label for="username">Username:</label>
    <input type="text" id="username" name="username" required>

    <label for="password">Password:</label>
    <input type="password" id="password" name="password" required>

    <button type="submit">Login</button>
    <?php
    // check if an error message was passed in the URL
    if (isset($_GET['error'])) {
      $error_message = $_GET['error'];
      echo '<p class="error">' . $error_message . '</p>';
    }
    ?>
  </form>

</body>
</html>

存储型

评论,注册,登录等,以上是用户交互进行输入输出的地方

过滤:

大小写转换
<img ONerror = 'alert(document.cookie)' src = "#">

<script>document.body.innerHTML=''<div style=visibility:visible;><h1>THIS WEBSITE IS UNDER ATTACK</h1></div>";</script>

 DOM 型号:

ll' onclick="alert(document.cookie)">

 XSS -payload

bp+XSSValidator

工具:xsstrike

地址:GitHub - s0md3v/XSStrike: Most advanced XSS scanner.  

XSS绕过

XSS防止手段

使用 HttpOnly 属性

服务器对输入脚本进行过滤或转码

CSRF

拿到A的客户端cookie信息,然后在B的客户端输入cookie,从而实现客户端请求伪造,拿到A的信息

所以就像pikachu说的:和XSS的区别,CSRF是借助用户权限进行攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取用户的权限,进而实施破环。

所以防范措施就是对敏感信息进行操作:比如增加更加安全的token。对敏感信息的操作增加安全的验证码;对敏感信息的操作实施安全的逻辑程序,比如修改密码时,需要先校验旧密码等

CSRF防止手段

验证请求的来源站点Referer

CSRF Token

XSS和CSRF的区别

CSRF需要用户先登录网站,获取cookie,XSS不需要登录则直接可以攻击。 XSS更像漏洞,CSRF更像攻击,xss是一种存在在网站的中的漏洞,攻击者可以利用这些漏洞进行攻击,而CSRF则是一种黑客的攻击手段。 只要有XSS,就可以发起CSRF类似攻击。

CSRF、SSRF的区别

CSRF:是服务器端没有对用户提交的数据进行随机值校验,且对http请求包内的refer字段校验不严,导致攻击者可以利用用户的Cookie信息伪造用户请求发送至服务器。 SSRF:是服务器对用户提供的可控URL过于信任,没有对攻击者提供的RUL进行地址限制和足够的检测,导致攻击者可以以此为跳板攻击内网或其他服务器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值