Max*_*mus 1 sql sql-injection sql-server-2008
此存储过程将检查用户名和密码,1如果凭据匹配则返回0.
CREATE PROCEDURE usp_CheckPermisssions
@UserName NVARCHAR(50),
@Password NVARCHAR(50)
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS( SELECT 1 FROM dbo.Users WHERE Username=@username and Password=@password)
RETURN 1
ELSE
RETURN 0
END
GO
Run Code Online (Sandbox Code Playgroud)
这只是一个示例存储过程.我只是想学习SQL注入技术,以防止我的代码被注入.
假设输入未在前端消毒.
我知道如果我在存储过程中使用动态查询或在前端定义查询,那么SQL注入技术将起作用.
不是:输入将通过前端传递.
换句话说我的问题
任何人都可以对此查询进行注射吗?如果有,怎么样?
SQL注入很少发生在存储过程中.为此,您需要在过程中动态创建查询.
它通常是调用受SQL注入的存储过程的代码.通过连接值而不正确编码来创建查询时,可以使用SQL注入来中断值并将代码注入查询.
危险代码示例:
string userName = Request.Form("username");
string password = Request.Form("password");
int ok;
using (SqlConnection conn = new SqlConnection(connStr)){
// parameters are not encoded correctly, so totally open to SQL INJECTION!
string query = "usp_CheckPermissions '" + userName + "', '" + password + "'";
using (SqlCommand cmd = new SqlCommand(query, conn)) {
cmd.CommandType = CommandType.Procedure;
ok = cmd.ExecuteScalar();
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用密码登录';drop table Users;--,那将是不好的...
| 归档时间: |
|
| 查看次数: |
5007 次 |
| 最近记录: |