我仍然是SQL领域的新手,所以我对是否使用安全的做法有疑问。
我有一个用户表,其中有一列用于额外的注释,它应该能够包含一个人可以输入的任何内容。我正在处理(或者我认为我是)注释字段中的单引号/ p>
notes = notes.replace("'", "''");
然后,我将执行的查询如下所示:
String query = "INSERT into users (username, password, notes) VALUES('" + username + "' , '" + password + "' , '" + notes + "'";
除了未加密的密码外,我还有什么可能缺少的?我并不认为很多黑客会知道这个软件的存在,但是再一次,没有人希望他们的代码被黑了。
答案 0 :(得分:3)
始终使用参数化查询。
使用ASP.NET C#:
SqlCommand cmd = new SqlCommand("INSERT INTO TableA (Username, Password, Notes) VALUES (@Username , @Password, @Notes)", Conn);
cmd.parameters.add("@Username",sqldbtype.nvarchar).value = username;
cmd.parameters.add("@Password",sqldbtype.nvarchar).value = password;
cmd.parameters.add("@Notes",sqldbtype.nvarchar).value = notes;
cmd.executenonquery();
然后您不必担心单引号或SQL注入。
答案 1 :(得分:2)
很抱歉,我还没有权利发表评论,但我能说的有用的是利用存储过程,并使用面向对象的编码风格来使用参数。
你也可以查看这个网站,因为它提供了很多关于提高安全性的信息(包括对抗SQL注入的斗争):https://www.owasp.org/index.php/Main_Page
答案 2 :(得分:1)
Google for&34;准备好的陈述" - 用户输入执行查询的安全方式。