当前位置: 首页> 娱乐> 八卦 > 前端安全:CSRF 和 XSS 攻击介绍 以及 如何解决

前端安全:CSRF 和 XSS 攻击介绍 以及 如何解决

时间:2025/7/15 6:42:08来源:https://blog.csdn.net/qq_25416827/article/details/140766541 浏览次数:0次
CSRF (Cross-Site Request Forgery)

介绍: 跨站请求伪造(CSRF)是一种攻击方式,攻击者诱导用户在已认证的应用中执行未授权的操作。通常,攻击者会通过伪造的请求在受害者不知情的情况下执行这些操作。

解决方案:

  1. 使用CSRF令牌:服务器生成一个唯一的令牌,将其嵌入到每个表单或AJAX请求中,并在提交时进行验证。

    javascript复制代码// 在表单中嵌入CSRF令牌
    <form action="/submit" method="POST"><input type="hidden" name="csrf_token" value="token_value_here"><!-- 其他表单元素 -->
    </form>
  2. SameSite Cookie属性:设置SameSite属性为StrictLax,限制第三方网站发送的跨站请求。

    http
    复制代码
    Set-Cookie: sessionId=abc123; SameSite=Strict; HttpOnly; Secure
  3. 验证Referer和Origin头:服务器可以检查HTTP头中的RefererOrigin字段,确保请求来源于合法的域名。

XSS (Cross-Site Scripting)

介绍: 跨站脚本攻击(XSS)是指攻击者在网页中注入恶意脚本,这些脚本在其他用户的浏览器中执行,从而窃取信息、劫持会话等。

解决方案:

  1. 输入验证和过滤:在服务器端和客户端对所有用户输入进行验证和过滤,移除或转义特殊字符。

    javascript复制代码// 转义用户输入
    function sanitize(input) {return input.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#039;');
    }
  2. 输出编码:在将用户输入输出到HTML页面时进行编码,防止脚本注入。

    javascript复制代码// 使用库例如DOMPurify进行输出编码
    import DOMPurify from 'dompurify';
    const safeHTML = DOMPurify.sanitize(userInput);
  3. 使用CSP(内容安全策略):通过设置CSP头来限制页面能够加载的资源,从而减少XSS攻击的风险。

    http
    复制代码
    Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com

手写:格式化Query字符串

需求:将URL中的查询字符串转换为对象,考虑到同名key的情况。

javascript复制代码function parseQueryString(queryString) {// 去掉前面的问号const query = queryString.startsWith('?') ? queryString.slice(1) : queryString;const params = query.split('&');const result = {};
​params.forEach(param => {const [key, value] = param.split('=');const decodedKey = decodeURIComponent(key);const decodedValue = decodeURIComponent(value);
​if (result.hasOwnProperty(decodedKey)) {if (Array.isArray(result[decodedKey])) {result[decodedKey].push(decodedValue);} else {result[decodedKey] = [result[decodedKey], decodedValue];}} else {result[decodedKey] = decodedValue;}});
​return result;
}
​
// 测试
const queryString = '?a=1&a=2&b=3';
console.log(parseQueryString(queryString)); 
// { a: ['1', '2'], b: '3' }

这个函数通过解析查询字符串,将其转换为对象。如果一个键有多个值,它会将这些值存储在数组中。

关键字:前端安全:CSRF 和 XSS 攻击介绍 以及 如何解决

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: