C#用户登陆漏洞

来源:百度知道 编辑:UC知道 时间:2024/06/30 16:46:55
C#用户登陆(winform),只要输入正确的用户名在后面加上 '-- 就可以进入,如何避免这样的漏洞,我应该怎么做?
说得都不详细呀...

一句话,使用参数化查询,可以避免SQL注入。
通俗一点讲,就是不要让用户输入的内容,成为你的查询语句的组成部分。

可以通过使用参数化查询来很好的解决这个问题。

示例:

假设有文本框txtUsername和txtPassword,是分别用来输入用户名和密码的。

查询语句如下:

string sql = "SELECT * FROM [Users] WHERE [Username] = '" + txtUsername.Text + "' AND [Password] = '" + txtPassword.Text + "'";

在正常情况下,我们输入用户名 abc ,密码 1234 ,那么这条语句就成了
SELECT * FROM [Users] WHERE [Username] = 'abc' AND [Password] = '1234'
很明显,它能达到我们的执行效果。

现在我们来考虑注入的情况
我们输入用户名abc'--
密码随便输入,假设也为1234
那么,这条语句就成了
SELECT * FROM [Users] WHERE [Username] = 'abc'--' AND [Password] = '1234'

要知道--在SQL语句里,它的含义比较特殊,它代表从它开始注释直到行结束。

那么这条语句的有效部分,就成了

SELECT * FROM [Users] WHERE [Username] = 'abc'
而后面的--' AND [Password] = '1234'
因为--的缘故,被注释掉了。

所以我们应该尽量采用参数化查询。

sting sql = "SELECT * F