coverty 输入验证和数据净化(sql注入)和确保不公开对可变对象的引用问题分析

本文探讨了CERT-J建议的输入验证和数据净化以防止SQL注入,提供了解决方案如使用PreparedStatement。同时,文章提醒在面向对象编程中避免返回私有可变成员对象的引用,以保护类的私有状态。举例说明了Date对象的可变性问题,并建议使用clone方法来避免意外修改。
摘要由CSDN通过智能技术生成

1.CERT-J输入验证和数据净化,需要解决sql注入问题

SQL注入漏洞的出现是因为生成的SQL查询语句部分元素来自非受信源。在没有防范的情况下,来自非受信源的数据可能恶意串改SQL查询语句,导致了信息的泄露和数据的更改.

假设一个系统对用户进行身份验证,通过如下查询语句访问SQL数据库。如果查询返回任何结果,则验证成功,否则,身份验证失败。

SELECT * FROM db_user WHERE username=‘’ AND password=‘’

假设攻击者可以把<用户名>和<密码>替换为任意字符串。在这种情况下,为用户名输入下列字符串而密码输入任意值就可以顺利绕过身份验证机制:

validuser’or‘1’= ‘1

鉴权用户的查询语句拼接如下:

SELECT * FROM db_user WHERE username=‘validuser’ OR ‘1’=‘1’ AND password=‘’

如果validuser记录在数据库表中存在,是一个有效的用户名,查询语句停止继续检查其他条件,不需要验证密码部分,因为用户名 validuser 判定结果是True,所有or 后面的部分不需要继续进行判定,但需要保证OR后面的SQL表达式语法正确,这样攻击者就取得了 validuser 用户的权限。类似的,攻击方可以通过构造如下密码和任意的用户名。

’ OR ‘1’='1

查询语句拼接后如下:

SELECT * FROM db_user WHERE username=‘’ AND password=‘’ OR ‘1’=‘1’

‘1’='1判定结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值