如何通过Web API使用AntiXss

这是一个曾经被问过的问题,但是我没有找到我想要的信息,或者我只是错过了要点,所以请多多包涵。如果我以错误的方式提出问题,我总是可以调整我的问题。

例如,如果我有一个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对象的所有属性上使用attribute来在属性级别使用此方法吗?可以在类级别使用一个属性来应用此属性,例如,该属性将验证和/或清除DTO对象的所有字符串属性?

我找到了有趣的文章,但没有一个能真正回答我的问题,或者我在某些答案上还有其他问题:

谢谢。

更新1:

我刚看完Stopping XSS when using WebAPI的答案

这可能是我要寻找的最接近的一个。除非我不想对数据进行编码,因为我不想将其存储在数据库中,所以我将看看是否可以弄清楚如何引发错误,但是我不确定条件会是什么。 。也许我应该只寻找 、;之类的字符。等等...,因为在我们的任何字段中都不太可能使用这些。

f269795165 回答:如何通过Web API使用AntiXss

  1. 在考虑编码时,您需要考虑数据的使用位置,因此,其中包含的数据仅当以HTML格式呈现时才是一个问题,因此,如果要显示由用户在任何地方,可能是要显示它的时候,您才需要对其进行html编码(例如,要避免在保存时对同一字符串进行html编码)。

  2. 再次,这取决于响应将用于什么...您可能要在将要显示的点上对其进行html编码...请记住是否在响应中对其进行编码可能与数据中的内容不匹配,因此,如果调用代码可以执行某些操作,例如调用您的API来搜索具有该名称的公司,则可能会导致问题。如果浏览器确实显示了html编码版本,则外观可能很难看,但比受到XSS攻击的用户好。

  3. 如果允许大多数字符正常使用,则很难清理诸如标签之类的文本。如果您可以将允许的字符加入白名单,并且只允许使用字母数字,那么会更容易,但这通常是不可能的。可以使用DTO对象上的正则表达式验证属性来完成此操作。我认为最好的方法是,如果不能停止某些字符,则对显示的值进行编码。尝试允许所有字符确实很困难,但是要避免像人们可以开始使用ascii字符之类的事情。

本文链接:https://www.f2er.com/3127534.html

大家都在问