我想对我们的应用进行安全测试。列和用户输入文本字段的最大长度设置为500。
目前我创建这样一个字符串的尝试是catalog.Reward_desc=Enumerable.Range(1,500).Select (e =>"ﻷ").Delimit(string.Empty);
看看我是否可以通过linqpad让我在一般的c#意义上搜索问题。
如何使用c#创建一个字符串以传入DAL,或者使用粘贴到输入元素(在html页面上)的字符串,以确保从前到中正确处理这个问题。 DAL?
修改 - 添加信息
这是示例代码,我尝试查看是否在SQL_Latin1_General_CP1_CI_AS
整理列中找到了无法正确存储的字符:
var catalog= new Catalog() { Add_dt=DateTime.Now, Update_dt=DateTime.Now, Reward_name=string.Empty, Reward_image=string.Empty,Add_by=string.Empty,Update_by=string.Empty, Redemption_type_id=1 };
using(var db = new UserQuery(this.Connection)){
db.Catalogs.Max (c => c.Reward_desc.Length).Dump();
this.Connection.Open();
using(var tran = new TransactionScope())
{
var source=Enumerable.Range(1,500).Select (e =>"€").Delimit(string.Empty);
catalog.Reward_desc=source;
catalog.Reward_desc.Length.Dump();
db.Catalogs.InsertOnSubmit(catalog);
db.SubmitChanges();
db.Catalogs.Max (c => c.Reward_desc.Length).Dump();
var desc=db.Catalogs.Where(c=>c.Reward_catalog_id == catalog.Reward_catalog_id).Select (c => c.Reward_desc).First().Dump();
(desc==source).Dump();
}
db.Catalogs.Max (c => c.Reward_desc.Length).Dump();
}
答案 0 :(得分:1)
写一个字符串,然后将其读回并比较值。如果您使用非ansi字母,则readed字符串很可能无效(例如,扩展字母将返回?
。
您选择的角色看起来很合适,但是,它取决于实际数据库的8位编码。
答案 1 :(得分:0)
var source=Enumerable.Range(1,500).Select (e =>'\u0FFE'.ToString()).Delimit(string.Empty);
是合法的varchar(500)
但是当存储在数据库中并被拉回时会出现截断的高位。所以没有例外,但是如果浏览器以这种方式提交它并且c#将它运行到db(通过大多数验证,因为它没有包含c#检查列入黑名单的任何内容),截断听起来很危险。)