假设我有一个带输入框的页面.用户在输入框中键入内容并点击按钮.该按钮触发一个函数,该函数获取键入文本框中的值,并将其输出到文本框下方的页面,无论出于何种原因.
现在,令人不安的是难以找到明确的答案,或者我不会问,但你会如何输出这个字符串:
<script>alert("hello")</script> <h1> Hello World </h1>
Run Code Online (Sandbox Code Playgroud)
这样既不执行脚本也不显示HTML元素?
我在这里真正要问的是,是否存在一种在Javascript中避免HTML和脚本注入的标准方法.每个人似乎都有不同的方式(我使用jQuery所以我知道我可以简单地将字符串输出到文本元素而不是html元素,但这不是重点).
假设这些:
A -----------------------> B
(Sender website) (Angular website)
Run Code Online (Sandbox Code Playgroud)
我们实现了一个普通的 Angular SPA (B),它的 index.html 和其他资源只是托管在 IIS 中,并且有一个简单的重写规则来处理 Angular 中的路由。Angular 中的用户需要登录并获得 JWT 令牌,并将其存储在浏览器存储中。
有一个网站(A)想要将用户重定向到 Angular 网站,但我们也希望将 JWT 令牌从 A 传递到 B,因为令牌是相同的,并且我们希望防止用户再次登录。
网站 A 可以在重定向到 B 时在post 请求标头中发送令牌。问题是 JS (Angular) 无法直接获取标头参数,因为它们正在发送到 IIS。
问题:
IIS中有没有一种方法,我们可以从请求中获取令牌,并在检索index.html时将其设置在html属性中?这样,JS 就可以检查它的 html 元素并找到令牌。
上述技术正确吗?如果没有,您能给出您的建议吗?
我有一个类似于Paypal嵌入网站的产品(客户将我的按钮添加到他们的网站,用户点击此按钮,一旦服务完成,我将他们重定向回原始网站).
我想向客户演示我的技术而不实际修改他们的实时网站.为此,是否可以配置http://stackoverflow.myserver.com/以便在无缝注入我的按钮时镜像http://www.stackoverflow.com/?
这意味着,我想演示在实时网站上使用我的按钮的体验,而不是在我的服务器上实际重新托管客户的数据库.
我知道这里存在安全问题,所以只要我们满足要求,请随时提及它们.对于使用HTTPS的网站,我不需要演示此内容.
更具体地说,我想通过在页面中注入Paypal按钮来演示Stackoverflow问题的财务赏金的想法.如何在不修改https://stackoverflow.com/的情况下通过http://stackoverflow.myserver.com/进行演示?
请求重新审核:我已根据您的要求对问题进行了重新编写.如果您仍然认为它过于宽泛,请通过在下面发表评论来帮助我理解您的推理.
更新:我发布了如何重写Javascript代码引用的URL的后续挑战?
UPDATE2:我放弃了bookmarklet和Greasemonkey的想法,因为它们需要客户端安装/修改.我们需要尽可能无缝地完成这个过程,否则许多过程会被这个过程关闭,不会让我们说话.
我们正在使用名为 FastAPI 的 Python 框架开发 REST API。html 注入代码安全测试失败。他们在 post 有效负载中发送一些 html 标签代码,我们将其插入到数据库中并在 GET 响应中发送相同的代码。在 FastAPI 中处理请求时,有什么方法可以防止这种 HTML 注入。
我知道可以使用escape过滤器在液体中转义 HTML
# cthulhu is "<blink>blink</blink>"
{{ cthulhu || escape }}
Run Code Online (Sandbox Code Playgroud)
但是默认情况下是否可以让液体从所有变量中的 HTML 中逸出?
我知道 Rails 默认情况下会转义所有 HTML,但我必须使用html_safe,否则液体模板中的所有 HTML 都会被转义。
我只在 GitHub 上发现了这个问题,它告诉 OP 只在 Stack Overflow 上询问。
在PHP中,有一个名为htmlspecialchars()的函数,该函数对字符串执行以下替换:
& (与号)转换为 &" (双引号)转换为 "'(单引号)转换为'(仅当设置了标志ENT_QUOTES时)< (小于)转换为 <> (大于)转换为 >显然,这样做是基于这5个特定字符是不安全的HTML字符。
我可以理解为什么最后两个不安全:如果将它们简单地“回显”,则可以交付任意/危险的HTML,包括可能带有<script>这些内容的javascript 。
问题1.为什么前三个字符(“&”号,双引号,单引号)也被视为“不安全”?
另外,我偶然发现了GitHub上的这个名为“ he”的库(由Mathias Bynens撰写),该库与编码/解码HTML实体有关。在那里,我发现了以下内容:
在HTML内容(&,<,>,“,”和“)中不安全使用的[...]字符将被编码。[...]
(来源)
问题2.是否有充分的理由考虑反引号另一个不安全的HTML字符?如果是,这是否意味着上述PHP函数已过时?
最后,所有这些都引出了一个问题:
问题3.除了上面提到的那些5/6字符以外,还有其他不应该认为是“不安全”的字符吗?
html escaping code-injection javascript-injection html-injections
我正在创建一个 Matplotlib 图以显示在我的 Django 应用程序的 HTML 模板中。我将此图保存在我的静态文件下,然后将其加载到img带有已保存.png. views.py在获得对图的参考后,我在我的中执行此操作。
# Get analysis visualization chart
figure = analyser.visualize_tweets(emotions)
# Save figure in static folder as png
figure.savefig('static/analysis_figures/figure.png')
# Inject html with figure path
response['analysis_figure_path'] = 'analysis_figures/figure.png'
return render(request, 'landing_page/index.html', response)
Run Code Online (Sandbox Code Playgroud)
我的 HTML 是这样的:
<img src={% static analysis_figure %} alt="">
Run Code Online (Sandbox Code Playgroud)
但是,这会导致第二次调用RuntimeError: main thread is not in main loopmy 中的函数时发生views.py(如果一切正常后调用它)。为了防止这个错误,我将保存 Matplotlib 图形移动到main()as 在主线程中运行,然后在我的原始函数中调用它。这修复了错误,但会阻止我的 HTML 重新加载,因此每次用户提交查询时,新图形都会显示在前一个之上,而不会删除前一个。关于任何问题的任何想法?