这可能是一个非常愚蠢的问题,但我想为什么不呢?
我使用RIA Services和Entity Framework作为后端。在我的应用程序中,我有一些地方接受用户输入,并使用他们的数据直接询问RIA服务(反过来,EF和我的数据库)问题。这些层中是否有任何一层有助于防止安全问题,或者我应该自己清理数据?
例如,每当新用户向应用程序注册时,我都会调用此方法:
[Query]
public IEnumerable<EmailVerificationResult> VerifyUserWithEmailToken(string token)
{
using (UserService userService = new UserService())
{
// token came straight from the user, am I in trouble here passing it directly into
// my DomainService, should I verify the data here (or in UserService)?
User user = userService.GetUserByEmailVerificationToken(token);
...
}
}
(我是否应该推出自己的用户验证系统则是另一回事,我们正在采用微软的会员框架。一般来说,我对sql注入和RIA服务更感兴趣)
发布于 2010-06-10 15:08:58
sql注入基于生成原始sql字符串时使用的未转义字符串
例如
"SELECT * FROM `user` WHERE `name` = '" . $name . "'"
是易受攻击的,因为SQL值可能包含‘标记,从而修改$name
语句的含义。一个很好的例子是,如果$name为' OR 1=1; --
,则执行该sql查询:
"SELECT * FROM `user` WHERE `name` = '' OR 1=1; --'"
这对于绕过密码检查非常有用,我可以告诉您:)
解决此问题的正确方法是将“character to”转义为\(对于mysql)。这就是像php这样的语言提供mysql_real_escape_string
的原因。但是,如果您使用适当的参数化查询系统,那么您可以传递任何您喜欢的内容,并且库将正确地对其进行转义。
查看您的代码,没有理由检查token
的值,除非您的UserService执行一些不可靠的sql字符串生成(我确信实体框架不会这样做,所以您应该很好)。
发布于 2010-06-10 15:10:57
EF将为您将其参数化,但是,如果您确实想确保启动SQL Profiler
并查看发送到SQL Server的内容
发布于 2010-06-10 15:07:15
你应该是安全的,我确信EF正在生成参数化的查询来从你的数据库中检索数据。
https://stackoverflow.com/questions/3015619
复制