在 RESTful API 响应中传递 html 并直接注入网页是否有风险?
Is it a risk to pass html in an RESTful API response and inject directly into webpage?
我试图了解当我们的 api 端点 returns 一个 json 响应 属性 时是否有机会 XSS attack返回 html 数据:
例如
https://www.link-to-my-website.com/api/v1/data
回复:
{
footer: "<a href='https://www.link-to-my-website.com'>My Link</a>"
}
然后在 React.js(或任何 js 前端)中执行类似的操作:
import React from 'react';
import PropTypes from 'prop-types';
export default class MyFooterComponent extends React.Component {
render() {
return (
<div className="footer" dangerouslySetInnerHTML={{ __html: this.props.footer }} />
);
}
}
我是否让最终用户面临风险?我应该清理还是不以这种方式传递数据?还是我太偏执了?
谢谢!
如果没有用户输入,就没有XSS问题。来自 owasp link:
Flaws that allow these attacks to succeed are quite widespread and occur anywhere a web application uses input from a user within the output it generates without validating or encoding it.
如果有用户输入,那么是的,您需要在发送响应并将其注入 html 之前专门清理该输入。
是的,这样的实现很容易受到脚本注入攻击。如果您正在维护 API,这可能不是什么大问题,但您永远不应该与第三方一起维护 API。但为了安全起见,不要进行该实施。您可以阅读更多相关信息 here。
我试图了解当我们的 api 端点 returns 一个 json 响应 属性 时是否有机会 XSS attack返回 html 数据:
例如
https://www.link-to-my-website.com/api/v1/data
回复:
{
footer: "<a href='https://www.link-to-my-website.com'>My Link</a>"
}
然后在 React.js(或任何 js 前端)中执行类似的操作:
import React from 'react';
import PropTypes from 'prop-types';
export default class MyFooterComponent extends React.Component {
render() {
return (
<div className="footer" dangerouslySetInnerHTML={{ __html: this.props.footer }} />
);
}
}
我是否让最终用户面临风险?我应该清理还是不以这种方式传递数据?还是我太偏执了?
谢谢!
如果没有用户输入,就没有XSS问题。来自 owasp link:
Flaws that allow these attacks to succeed are quite widespread and occur anywhere a web application uses input from a user within the output it generates without validating or encoding it.
如果有用户输入,那么是的,您需要在发送响应并将其注入 html 之前专门清理该输入。
是的,这样的实现很容易受到脚本注入攻击。如果您正在维护 API,这可能不是什么大问题,但您永远不应该与第三方一起维护 API。但为了安全起见,不要进行该实施。您可以阅读更多相关信息 here。