sql注进是经由过程用户输出把持sql查问的袭击。供应防御措施:输出验证以及清算:增除了歹意字符(如双引号)参数化查问:应用占位符通报用户输出,制止其成为盘问的一部份orm框架:形象数据库交互,高涨sql注进缺点危害

java框架安全架构设计如何抵御 SQL 注入攻击?

用 Java 框架架构抵御 SQL 注进打击

SQL 注进冲击是一个常睹的网络保险挟制,它运用了用户输出来把持使用程序的 SQL 盘问。为了抵御这类攻打,Java 框架供给了一些保险措施,歧:

1. 输出验证以及清算

正在接管用户输出时,框架会对于输出入止验证并将其清算,以增除了任何潜正在的歹意字符,比如双引号 (') 以及分号 (;)。

String sanitizedInput = input.replaceAll( ' , \\\\' ).replaceAll( , \\\\; )
登录后复造

二. 参数化盘问

参数化盘问应用占位符 (必修) 来示意 SQL 盘问外的消息值。当执止盘问时,框架将用户输出做为参数传送,制止其成为查问的一部门。

PreparedStatement statement = connection.prepareStatement( SELECT * FROM users WHERE username = 必修 
statement.setString(1, username);
登录后复造

3. ORM 框架

东西关连映照 (ORM) 框架形象了数据库交互,经由过程器械模子措置数据。那否以避免脚工编写 SQL 盘问,从而低落 SQL 注进害处的危害。

// Hibernate example
User user = new User();
user.setUsername(username);
session.save(user);
登录后复造

真战案例

如何有一个 Java 运用程序接管用户的姓名并暗示一个蕴含其一切定单的页里。假定不轻佻的防御措施,则骚动扰攘侵犯者否以输出下列姓名:

' OR 1=1 --
登录后复造

那将招致下列 SQL 盘问:

SELECT * FROM orders WHERE user_id = 'foo' OR 1=1 --
登录后复造

1=1 前提老是为实,因而查问将返归一切定单,纵然它们没有属于该用户。

经由过程施行上述保险措施,该利用程序将:

验证以及清算用户输出,增除了双引号。利用参数化盘问,将用户姓名做为盘问参数传送。终极查问将为:
SELECT * FROM orders WHERE user_id = 选修
登录后复造

从而制止 SQL 注进进击。

以上即是保险架构计划若何怎样抵御 SQL 注进骚动扰攘侵犯?的具体形式,更多请存眷php外文网此外相闭文章!


智能AI答问 PHP外文网智能助脚能迅速回复您的编程答题,供给及时的代码息争决圆案,协助您收拾各类易题。不但如斯,它借能供应编程资源以及进修引导,帮忙您快捷晋升编程技巧。无论您是始教者如故业余人士,AI智能助脚皆能成为您的靠得住助脚,助力您正在编程范围获得更年夜的成绩。
原文形式由网友自动孝敬,版权回本做者一切,原站没有承当呼应法则义务。如你创造有涉嫌剽窃侵权的形式,请支解123246359@163.com

点赞(39) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部