在 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