gpt4 book ai didi

c# - 如何通过 Web API 使用 AntiXss

转载 作者:行者123 更新时间:2023-12-04 11:01:09 26 4
gpt4 key购买 nike

这是一个以前被问过的问题,但我没有找到我正在寻找的信息,或者我可能只是错过了这一点,所以请耐心等待。如果我问错了,我总是可以调整我的问题。

例如,如果我有一个 POST 端点,它使用具有 2 个属性(即 companyRequestDto)的简单 DTO 对象,并在其属性之一中包含一个脚本标记。当我从 Postman 调用我的端点时我使用以下内容:

{
"company": "My Company<script>alert(1);</script>",
"description": "This is a description"
}

当我的端点中的操作收到它时,
public void Post(CompanyRequestDto companyRequestDto)

我的 DTO 对象将自动设置,其属性将设置为:
companyDto.Company = "My Brand<script>alert(1);</script>";
companyDto.Description = "This is a description";

我显然不希望这些信息按原样存储在我们的数据库中,也不希望将其存储为如上所示的转义字符串。

1) 请求:所以我的第一个问题是,如果发布的 DTO 包含一些无效内容(例如标签),我该如何抛出错误?

我看过 Microsoft AntiXss,但我不明白如何处理这个问题,因为 DTO 对象的属性中提供的数据不是 html 字符串,而只是一个字符串,所以我在这里缺少什么,因为我不明白这如何帮助清理或验证传递的数据。

当我打电话
var test = AntiXss.AntiXssEncoder.HtmlEncode(companyRequestDto.Company, true);

它返回一个编码的字符串,但是然后呢??

有没有办法删除不允许的关键字或只是简单地抛出错误?

2) 回复:假设 1) 没有实现或没有正常工作并且它最终被存储在我们的数据库中,我是否想将编码数据作为 json 字符串返回,而不是返回:
"My company"

我是否应该返回:
"My Company&lt;script&gt;alert(1)&lt;/script&gt;"

浏览器(或任何应用程序)是否应该显示如下?:
"My Company&lt;script&gt;alert(1)&lt;/script&gt;"

3) 代码:假设有一种方法可以清理或抛出错误,我应该在属性级别使用它对我的各种 DTO 对象的所有属性使用属性,还是有一种方法可以使用将验证和/或例如清理 DTO 对象的所有字符串属性?

我找到了有趣的文章,但没有人真正回答我的问题,或者我在某些答案上遇到了其他问题:
  • asp.net mvc What is the difference between AntiXss.HtmlEncode and HttpUtility.HtmlEncode?
  • Stopping XSS when using WebAPI (目前正在研究这个,但看不到示例如何解决问题,因为无论我是否使用 script 标签,属性总是失败)
  • how to sanitize input data in web api using anti xss attack (也在看这个,但在我的工作项目中调用 ReadFromStreamAsync 时遇到问题。可能归结于我的 web.config 中的某些设置,但还没有弄清楚原因,但它似乎总是返回一个空字符串)

  • 谢谢。

    更新 1:

    我刚刚完成了来自 Stopping XSS when using WebAPI 的回答

    这可能是最接近我正在寻找的。除了我不想编码数据,因为我不想将它存储在我的数据库中,所以我会看看我是否能弄清楚如何抛出错误,但我不确定条件是什么.也许我应该只查找诸如 <、>、; 之类的字符。等......因为这些不太可能用于我们的任何领域。

    最佳答案

  • 当你考虑编码时,你需要考虑你的数据将在哪里使用,所以如果它呈现为 HTML,那么其中的数据只是一个问题,所以如果你要显示用户在任何地方提供的数据,它可能在您要显示它的一点是您希望对其进行 html 编码以进行显示(例如,您希望避免在保存时重复对同一字符串进行 html 编码)。
  • 同样,这取决于响应将用于什么......你可能想在它要显示的时候对它进行 html 编码......请记住,如果你在响应中编码某些内容,它可能与数据中的内容不匹配因此,如果调用代码可以执行某些操作,例如调用您的 API 以搜索具有该名称的公司,这可能会导致问题。如果浏览器确实显示了 html 编码的版本,它可能看起来很难看,但这比用户受到 XSS 攻击要好。
  • 如果您允许大多数字符正常使用,则很难清理标签等内容的文本。如果您可以将允许的字符列入白名单并且只允许例如字母数字,则更容易,但这通常是不可能的。这可以使用 DTO 对象上的正则表达式验证属性来完成。如果您无法停止某些字符,我认为最好的方法是对显示值进行编码。尝试允许所有字符但避免诸如人们可以开始使用 ascii 字符等之类的事情真的很难。
  • 关于c# - 如何通过 Web API 使用 AntiXss,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58793001/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com