跨站点脚本(XSS)是Web应用程序中常见的一种计算机安全漏洞,它使恶意攻击者能够将客户端脚本注入其他用户查看的网页中。攻击者可以使用利用漏洞利用的跨站点脚本漏洞来绕过访问控制,例如相同的源策略。
Next中的dangerouslySetInnerHTML真的很危险吗?什么时候可以使用?
我在Next中实现了Google Tag Manager,我在网上看到的所有资源都说使用dangerouslySetInnerHTML。我对文档的理解是它是“危险的”,因为它
为什么空方法在 JavaScript 中就像接收器一样工作?
我用空方法b()定义对象a。该方法没有参数并且不执行任何操作! 请问有人告诉我,为什么当我调用 a.b() 并传递 JS 代码作为参数时,它会执行代码吗? ...
我想在我的服务器上实现XSS过滤主要有两个原因: 当我的服务器上发生 XSS 攻击时,我希望实时收到通知。这将使我能够立即采取...
如何防范FtpWebRequest上的跨站脚本(XSS)漏洞?
我正在使用 FtpWebRequest 将文件上传到服务器。但它会导致严重的跨站点脚本(XSS)漏洞。该文件内容是导入的,我需要按原样上传。我该如何解决这个问题...
启用 HTTPOnly 和 CSP 时使用 XSS 窃取 Cookie:解决方法和策略
当 HTTPOnly 开启且定义了 CSP 规则时,如何窃取 cookie?假设攻击者获得了一个执行 HTTP 的输入字段,并且该输入字段容易受到 XSS 攻击: 当 HTTPOnly 开启且定义了 CSP 规则时,如何窃取 cookie?假设攻击者获得了一个执行 HTTP 的输入字段,并且该输入字段容易受到 XSS 攻击: <form action="/createThread?topic={{lcTopic}}" method="post" class=""> <h2 class="text-muted">New Thread</h2> <hr> <div class="form-group"> <label>Body</label> <textarea type="text" rows="10" class="form-control" name="body" placeholder="Type the body of your thread here..."></textarea> </div> <button type="submit" class="btn btn-primary">Create Thread</button> <button type="button" id="threadPreview" class="btn btn-default">Preview</button> </form>` 在我的服务器中,我将 CSP 规则定义为: .use( helmet.contentSecurityPolicy({ directives: { defaultSrc: ["'self'"], scriptSrc: [ "'self'", "cdnjs.cloudflare.com" ], }, }) ) 攻击者可能通过将以下代码注入文本字段来绕过 CSP: <!DOCTYPE html> <html> <head> <title>XSS Demo</title> <SCRIPT src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></SCRIPT> <SCRIPT src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js"></SCRIPT> </head> <body ng-app ng-csp> <div> <button ng-click="$on.curry.call().alert('xss')">Click Me! </button> <div style="display:none;"> {{$on.curry.call().alert('xss')}} </div> </div> </body> </html> 现在,由于启用了 HTTPOnly,攻击者无法简单地执行“alert(document.cookie)”。考虑到 CSP 规则,他们还可以采用哪些其他方法来窃取 cookie? 我尝试了一个简单的警报(document.cookie),但由于 HTTPOnly 而不起作用: HTTP/1.1 200 OK X-Powered-By: Express Content-Security-Policy: default-src 'self';script-src 'self' cdnjs.cloudflare.com;base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests Content-Type: text/html; charset=utf-8 Content-Length: 5924 ETag: W/"1724-zhGBtITbjmwCa+un6GYhGKL+lwo" Set-Cookie: connect.sid=THE COOKIE; Path=/; HttpOnly Date: Sat, 27 Apr 2024 09:29:04 GMT Connection: close 我什至尝试这样做: {{$on.curry.call().eval("var url = '/'; fetch(url).then(response => console.log(response.headers.get('Set-Cookie')))")}} 但是自从 CSP 我得到: angular.js:5930 EvalError:拒绝将字符串评估为 JavaScript,因为“unsafe-eval”不是以下内容安全策略指令中允许的脚本源:“script-src 注意:攻击者显然不允许更改服务器代码!他只能访问输入字段! 在这种情况下,攻击者无法从cookie中获取价值。 因为,HttpOnly 已激活。 这个活动是对的。 如果你成功执行JavaScriptalert(),你应该降级Web浏览器并重新攻击。
Yii2 支持使用 helper class\yii\helpers\HtmlPurifier 对显示数据进行 XSS(跨站点脚本)验证,但这仅验证和清理像这样的输出代码 回声
我想在 Angular 2 应用程序的组件模板中设置 DIV 的背景图像。然而,我不断在控制台中收到以下警告,但没有达到预期的效果...我不确定...
如何修复 ASP.NET Core MVC 中的跨站脚本 (XSS) 漏洞
我的 ASP.NET MVC 代码中有以下代码。 安全评估工具已报告跨站脚本 (XSS) 漏洞 返回新的 JsonResult(new { 响应 = sresponse, clientdata = ...
我目前正在为使用 Next.js 制作的生产应用程序制定内容安全策略 (CSP)。虽然我找到了使用该框架实施 CSP 的可靠文档,但有...
我目前正在尝试包装一个 Web 应用程序 (ConnectWise) 以包含在我公司的中央 Intranet 站点中。大多数情况下,这是一个相当简单的过程;创建一个包含页面,...
如果某些属性包含这些值,如何在 Spring Boot 中清理请求正文
如果作为值存在,是否有任何库可以对这些进行编码,例如。可以是 html 属性、js 事件、脚本、评估为 true 的表达式吗?尽管它应该转义诸如“>50000&
","","b","i","你好"); 打印_r($x); 回显“”; var_dump($x); 在 html 源中输出这个! 大批 ( [0] => <?php $x = array("<b>","<i>","b","i","<h1>hello</h1>"); print_r ($x); echo "<hr>"; var_dump ($x); 将其输出到 html 源代码中! Array ( [0] => <b> [1] => <i> [2] => b [3] => i [4] => <h1>hello</h1> ) <hr>array(5) { [0]=> string(3) "<b>" [1]=> string(3) "<i>" [2]=> string(1) "b" [3]=> string(1) "i" [4]=> string(14) "<h1>hello</h1>" } 显然,我可能会因此受到 XSS 攻击! 如何确保数组值经过 html 编码? 虽然这个问题有一个公认的答案,但我认为 David Morrow 的答案是最好/最简单/最实用的(使用 print_r true 标志): echo "<pre>".htmlentities(print_r($some_array, true))."</pre>"; 尽管如此,这是另一种使用输出缓冲的解决方案: <?php ob_start(); print_r($some_array); $buffer = ob_get_clean(); echo "<pre>".htmlentities($buffer)."</pre>"; ?> 我发现knittl的代码不起作用。我必须进行一些小更改才能使其正常工作,如下所示: array_walk_recursive($inputarray, function(&$v) { $v = htmlspecialchars($v); }); 现在这在 PHP5.3+ 中工作得很好 或者您可以将 print_r 保存到字符串中,然后使用设置为 true 的第二个参数对其进行转义。 $arr = array('<script>alert("hey");</script>'); $str = print_r($arr, true); echo htmlentities($str); 输出: Array ( [0] => <script>alert("hey");</script> ) 脚本未执行 这个 PHP 手册注释中描述了一个对我有用的函数。 他替换var_dump的函数实现为: function htmlvardump() { ob_start(); $var = func_get_args(); call_user_func_array('var_dump', $var); echo htmlentities(ob_get_clean()); } 这在 PHP 5.3+ 中对我有用。 (请注意,原始来源中有一个拼写错误)。 一个简单的解决方案是使用 array_walk_recursive: array_walk_recursive($inputarray, function(&$v) { $v = htmlspecialchars($v); }); echo <pre>; echo htmlspecialchars(print_r($key['value'], true)); echo '</pre>'; 我使用此代码从无sql数据库输出数组值(包含adsense代码)。 感谢 Knittl,这就是我的想法。 按照我想要的方式工作! <?php $x = array("tag1" => "<b>","tag2" => "<i>","tag3" => "b","tag4" => "i","tag5" => "<h1>hello</h1>"); echo "<hr><pre>"; blp_print_r ($x); echo "<hr>"; print_r($x); echo "</pre><hr>"; /* outputs this in the browser normal view new one... Array ( ['tag1'] => <b> ['tag2'] => <i> ['tag3'] => b ['tag4'] => i ['tag5'] => <h1>hello</h1> ) traditional one... Array ( [tag1] => [tag2] => [tag3] => b [tag4] => i [tag5] => hello ) */ function blp_print_r($inputarray){ echo "Array\n(\n"; echo "<blockquote>"; array_walk($inputarray,"html_encoder"); echo "</blockquote>"; echo ")"; } function html_encoder($current_val,$current_key){ echo "['" , htmlentities($current_key, ENT_QUOTES, "UTF-8") , "']", " => "; echo htmlentities($current_val, ENT_QUOTES, "UTF-8") , "\n"; } ?> 我发现这个页面非常有帮助,但我确实将函数修改为递归,walker 处理函数在回显键后检查值处的数组,然后回调该数组上的原始函数。我认为这使它成为真正的“递归 htmlentity 函数”,因此有了新名称...... function htmlentities_print_r( $inputarray ) { echo "<pre>" ; array_walk( $inputarray , "html_encoder" ) ; echo "</pre>"; } function html_encoder($current_val,$current_key){ echo "['" , htmlentities($current_key, ENT_QUOTES, "UTF-8") , "']", " => "; if ( is_array( $current_val ) ) { blp_print_r( $current_val ) ; } else { echo htmlentities($current_val, ENT_QUOTES, "UTF-8") , "\n"; } } 确实, print_r 为 true 的解决方案是最简单的解决方案。但我会这么做: $ret = htmlentities( print_r( $some_array, true ) ) $ret = str_replace( array("\n"), array('<br>'), $ret ); printf( "<br>Result is: <br>%s<br>", $ret ); 但这取决于你们所有人。
在下面的 JSP 页面中,Checkmax 显示了反射型 XSS 攻击,因为我在 JavaScript 源代码中使用 ${pageContext.reqest.contextPath} 变量。我尝试过使用 <p>在下面的 JSP 页面中,Checkmax 显示了反射型 XSS 攻击,因为我在 JavaScript 源中使用 <strong>${pageContext.reqest.contextPath}</strong> 变量。我尝试过使用<pre><code><script type="text/javascript" src=" <c:url value="${pageContext.request.contextPath}/js/viewone.js" />"> </code></pre>,但没有成功。</p> <pre><code><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>jsp page</title> <script type="text/javascript" src="${pageContext.reqest.contextPath}/js/viewone.js"></script> </head> <body> <h3>all contents goes here </h3> <br> </body> </html> </code></pre> <p>如果有人能帮助解决这个问题,我将非常感激。我在 stackoverflow 中搜索了很多解决方案,但没有帮助。</p> </question> <answer tick="false" vote="1"> <p>就您而言,我认为这是 CheckMarx 误报,因为 <pre><code>request.contextPath</code></pre> 不是用户输入。无论如何,如果你必须修复它,我的经验是你必须使用 CheckMarx“识别”的一些库/方法来逃避 <pre><code>pageContext.reqest.contextPath</code></pre>。</p> <p>例如在我的例子中,我使用了 <a href="https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringEscapeUtils.html" rel="nofollow noreferrer">StringEscapeUtils.escapeHtml</a> 并且 CheckMarx 对此很满意。只需确保您的 <pre><code>pageContext.reqest.contextPath</code></pre> 中没有任何 html 实体,例如“&”、“">”、...</p> </answer> </body></html>
我创建了一个网站登录页面,其工作方式如下: 用户加载网站后,服务器会设置一个随机的 26 个字符的字母数字令牌 cookie。 (这个cookie设置为HTTPOnly=true,...
我正在使用 laravel 5.1 我使用此代码将帖子保存到数据库 Auth::User()->posts()->save(Blog::create($request->all())); 当我使用此代码显示帖子时,我想要一些文本和图像......
使用img标签加载不受信任的SVG文件是否存在XSS威胁? 如: 我读到大多数浏览器都禁用通过 th 加载的 svg 文件中的脚本...
我试图在将 html 字符串发送到数据库之前对其进行清理,我正在使用 sanitize-html npm 包,但它不起作用 if (注释内容) { const resultContent = 清理(noteContent); ...
我在 Drupal 工作,我有一个带有输入字段的页面来搜索您的位置。现在,有可能进行 XSS 攻击,我正在尝试使用消毒功能来修复它,但它不起作用......
为什么checkmarx使用DOMPurify后没有通过XSS漏洞?
我正在使用 Checkmarx 扫描项目中的漏洞,但无法在 JS 文件中使用 DOMPurify 清除 XSS 漏洞。 示例代码: 函数purifyDOM(标签){ var dom_purify = DOMPurify.
如何为 JavaScript XSS 测试创建“不安全”环境
我正在学习 XSS 安全性以及如何预防它。为此,我想创建有漏洞的代码,然后看看如何添加安全措施来修复它。 我创建了一个接受