危险的多选删除

作者:vkvi 来源:ITPOW 日期:2006-5-16

网页上常常有一种功能,就是选中多篇文章,然后点击删除,就删除了选中的文档。

假设文章前的多选框名称是 C1,我们用以下方法来执行删除:
sql = "delete from where ID in (" & request.Form("C1") & ")"

其实这种方法是不安全的,假如客户端改变了 C1 的值,改成如下值:
1);delete from 用户表;--

进入 sql 后就变成了:
delete from where ID in (1);delete from 用户表;--)

分号用于分隔多个 SQL 语句,两横框表示注释,于是上述语句就执行了两个 SQL 语句,其中第二个语句删除了用户表的记录。

我们应该在 C1 进入 SQL 之前进行判断
dim c
c = request.Form("C1")
if IsNumeric(c) then
    sql = "delete from where ID in (" & c & ")"
end if

IsNumeric 认为  1, 2, 3 这种格式是数字格式,请参见:让我意外的IsNumeric()函数

相关文章