最友好的SQL注入防御方法

博客指出部分系统因过度过滤字符导致用户界面不友好、用户流失,给出在绝对安全前提下,过滤最少且友好的防注入方法。包括用isNumeric()判断数字型变量,将单引号替换成两个处理字符型变量,还给出代替ASP的Request函数及过滤代码示例。
    不知道是不是有些人给SQL注入吓怕了,把一大堆根本对系统安全没威胁的字符(比如"号,%号等)都过滤了(甚至NB联盟有些人居然也这样做),使得一些系统的User Interface极不友好,经常出现"输入特殊字符"的提示,造成用户的流失.
   以下是根据我一年注入经验的总结,在绝对安全的前提下,过滤得最少,最友好的防注入方法:
    1.数字型变量:用isNumeric()判断是否为数字
    2.字符型或其它类型变量:将单引号'替换成两个
    下面给出两个函数,用来代替ASP的Request函数,只要每处地方使用这两个函数取值,SQL注入根本没有用武之地.

'----------------------------------------------------------------
' 获取数字型参数
'----------------------------------------------------------------
Function ReqNum ( StrName )
    ReqNum = Request ( StrName )
    if not isNumeric ( ReqNum ) then
        response.write "参数必须为数字型!"
        response.end
    end if
End Function

'----------------------------------------------------------------
' 获取字符型参数
'----------------------------------------------------------------
Function ReqStr ( StrName )
    ReqStr = Replace ( Request(StrName), "'", "''" )
End Function

或是加代码过滤

Function sqlstr(data)          '過濾字符串
   data = Trim(Replace(Request(data), "&", "&"))
  data = replace(data, "<", "&lt;")
  data = replace(data, ">", "&gt;")
  data = replace(data, "'", """")
  data = replace(data, "*", "")
  data = replace(data, "?", "")
  data = replace(data, "select", "")
  data = replace(data, "insert", "")
  data = replace(data, "delete", "")
  data = replace(data, "update", "")
  data = replace(data, "delete", "")
  data = replace(data, "create", "")
  data = replace(data, "drop", "")
  data = replace(data, "declare", "")
  data = replace(data, vbCrLf&vbCrlf, "</p><p>")
  data = replace(data, vbCrLf, "<br>")
  sqlstr = (data)
  End Function

不夠自己加!
SQL注入是一种常见的网络安全威胁,攻击者通过输入恶意SQL代码来操纵数据库。为防止SQL注入,开发者可以采用多种策略和技术来保护应用程序。以下是一些常见的SQL注入防御方法: 1. **参数化查询(Parameterized Queries)**:这是有效的防御手段之一,它将SQL语句中的用户输入作为参数传递给查询,而不是直接拼接到SQL文本中。这样可以避免解析器执行恶意代码。 2. **预编译语句(Prepared Statements)**:类似参数化查询,数据库会预先编译查询语句,然后多次使用,每次传入不同的参数值。 3. **输入验证和过滤**:对用户输入进行严格的检查和格式验证,确保它们符合预期的数据类型和模式,移除特殊字符或转义特殊SQL字符。 4. **使用存储过程(Stored Procedures)**:存储过程在服务器端执行,减少了直接暴露在用户输入下的SQL代码,提高了安全性。 5. **输入长度限制**:设置合理的输入长度限制,防止恶意长字符串导致的SQL注入。 6. **错误处理和信息隐藏**:不向用户显示详细的错误信息,这可能包含数据库结构或敏感数据,攻击者可通过这些信息构造注入语句。 7. **使用ORM(Object-Relational Mapping)框架**:这些框架通常处理SQL查询的细节,提供了一定程度的安全性。 8. **启用数据库的SQL注入防御功能**:例如,MySQL的`EXTRA`信息或某些数据库系统的参数设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值