如何从用户输入中保护字符串

时间:2011-10-19 13:30:56

标签: c# string security xss

我们有一个网站,用户可以有理由拒绝来自其他用户的内容。原因是通过电子邮件发送给其他用户。

哪些字符可以发送给其他用户? 我不打算对不需要的字符进行正则表达式搜索,而只是想在原因中保留“潜在的”“安全”字符。

例如原因:

"Hello <b>Dear User B"

将转变为:

"Hello bDear User B"

目前我只是在char数组上做“Where”并通过

定义我的“安全”条件
char.IsLetterOrDigit || char.IsPunctuation || char.IsWhiteSpace

有没有更好的技巧?

3 个答案:

答案 0 :(得分:3)

您可以在电子邮件正文中完美地使用HTML。这将允许更漂亮的格式。您可以在通过电子邮件发送之前使用用户输入上的AntiXSS library来过滤HTML中的危险内容(例如<script>标记之类的内容)。

答案 1 :(得分:1)

您可以尝试在C#中使用HttpEncoder类,并在字符串上使用htmlEncode方法。 这将全部转为&lt; &GT;进入与&amp; lt;相当的html等。返回一个安全的字符串。

虽然所有的&amp; lt;看起来都很难看在电子邮件中有点类似的东西,你可以把它看作是一个潜在的安全工作。

如果您要将注释插入数据库中,我也不建议使用此方法,因为它不是sql-injection证明。在这种情况下,您可以使用htmlencode发送电子邮件并使用参数插入数据库。

答案 2 :(得分:0)

如果您认为ascii值为32到126的字符对您来说是安全的,那么您可以使用

bool bad = value.Any(c => c < 32 || c > 126);