为了账号安全,请及时绑定邮箱和手机立即绑定

防止注入的C#字符串参数?

防止注入的C#字符串参数?

C#
至尊宝的传说 2022-06-18 17:43:28
以这段代码为例:IAmazonSimpleDB client = new AmazonSimpleDBClient(Amazon.RegionEndpoint.USEast1);        SelectResponse response = client.Select(new SelectRequest() { SelectExpression = "SELECT * FROM `foo` where FooID = '" + id + "'" });我可以这样重写它:IAmazonSimpleDB client = new AmazonSimpleDBClient(Amazon.RegionEndpoint.USEast1);        SelectResponse response = client.Select(new SelectRequest() { SelectExpression = "SELECT * FROM `foo` where FooID = '{0}'", id });但据我了解,这仍然容易被注射,对吧?还有什么我可以在这里做的吗?我们没有使用 SQL,所以我不能做 SQL 参数。
查看完整描述

1 回答

?
开满天机

TA贡献1786条经验 获得超12个赞

我通常会检查 id 是否为整数。这样,如果它不是 int,您将获得异常或布尔值。除非您使用 GUID 值,否则它将正常工作。


var isNumeric = int.TryParse("123", out int n); //Will give a bool


Int32.Parse(yourString); //This will give an exception if it is not an possible integer

如果不止于此,那么您可以使用正则表达式来查找奇怪的值并删除不应该存在的字符,例如空格。如果没有空格,大多数 SQL 注入攻击都不会起作用……我想。删除所有空格非常容易,我假设您的 ID(即使它很复杂)不会包含空格。


string s = " "

string t = s.Replace(" ", ""). //It will be hard to do a sql attack if the spaces are removed.

有点离题,但使用 C# 6.0,您可以以不同的方式格式化字符串;这是一个称为“字符串插值”的新功能(感谢 Etienne de Martel)。


$"SELECT * FROM `foo` where FooID = '{id}'"


查看完整回答
反对 回复 2022-06-18
  • 1 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信