ASP程序执行SQL语句时防止注入攻击的问题

以下是一个简单的用户更改密码的代码

username=request("user_name")
pwd=request("pwd")
username=replace(username,"’","’’")
pwd=replace(pwd,"’","’’")
sql="update tbl_test set pwd=’" & pwd & "’ where uid=’" & username & "’"
set rs=conn.execute (sql)

现在,假如我注册一个用户,用户名为 aa’; exec sp_addlogin ’haha

当该用户更改密码时(假设改为pp),会出现什么后果呢?

sql变为 update tbl_test set pwd=’pp’ where uid=’aa’ ; exec sp_addlogin ’haha’

结果是用户密码没有被修改,因为没有 aa这个用户,但在你的数据库中创建了一个登陆,新登陆名为 haha。

将用户名稍加修改,实际上可以运行任何sql语句,任何sql系统过程。

而这一切都在你不知情的情况下发生的,实际上,上面的只是一个示范,稍微修改一下用户名,我们可以做添加一个DBA账号,删除所有纪录,读取用户密码等越权操作。

dawei

【声明】:邵阳站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。