Java Web 防范 SQL 注入攻击

Java 代码安全实战:识别并防范 SQL 注入、XSS 攻击,筑牢 Web 应用安全防线 SQL 注入(SQL Injection):通过向 SQL 查询中注入恶意代码,攻击者能够获取、修改甚至删除数据库中的数据。SQL 注入常见于用户输入没有经过有效过滤或处理时。跨站脚本攻击(XSS,Cross-Site Scripting):攻击者通过在 Web 页面中注入恶意脚本(如 JavaScript),在其他用户访问该页面时执行,从而窃取用户数据、篡改页面内容、进行钓鱼攻击等。Web 应用的安全性不仅仅是防止攻击,更是保证用户数据和隐私的基本责任。 阅读详情

1、SQL注入概述:

  SQL 注入是从正常的 WWW 端口访问,而且表面看起来跟一般的 Web 页面访问没什么区别,所以目前市面的防火墙都不会对 SQL 注入发出警报,如果管理员没查看日志的习惯,可能被入侵很长时间都不会发觉。
  其实 SQL 注入主要还是一些程序员的水平及经验参差不齐,没有对用户输入数据的合法性进行判断。 使应用程序存在安全隐患,任何用户可以提交一段数据库查询代码,并根据程序返回的结果,获得某些他想得知的数据,造成用户可以在输入中包含恶意代码篡改程序功能。更严重的用户还可能窃取最高管理权限,删除数据库中所有的数据。

2、SQL注入原理:

2.1 没有过滤,或没有正确过滤转义字符:

首先来看一个Sql语句:

String sql = "SELECT * FROM USERINFO WHERE NAME = '+" NAME "+'";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(dbUrl,dbUserName,dbPassword);
Statement state =con.createStatement();
ResultSet resultSet = state.executeQuery(sql);

这里我们直接使用用户传递过来的 name 变量拼接了一条SQL 语句进行查询。 我们乐观地认为用户输入的都是正常的字符串,没有考虑到恶意攻击的情况。 但是如果用户输入了这样一段内容:String name = ” xxx’or’1’=’1”
那么 ,经过拼接得到的 SQL 就变成了这样。String sql = “SELECT * FROM USERINFO WHERE NAME = ‘xxx’or’1’=’1’”,将会查询得到所用的用户信息。

String name = ” xxx’or’1’=’1’;DROPTABLE USERINFO” 而sql语句如果变成这样,那么String sql = ”select * from USERINFO where name =’xxx’ or ‘1’ =’1’;DROPTABLE USERINFO “将会清掉整个表的记录。那么后果可想而知。

2.2、数据库服务器中的漏洞:
许多程序员认为, jsp 结合 mysql 是一个不错的选择,其主要原因是这两种技术都可以找到免费的载体。 但是有时,数据库服务器软件中也存在着漏洞 。 如 MYSQL 服务器中DATABASE () 、 USER () 、 SYSTEM_USER () 、 SESSION_US -ER ()、 CURRENT_USER () 等函数漏洞。 这种漏洞允许一个攻击者根据错误的统一字符编码执行一次成功的 SQL 注入式攻击。

2.3、盲目 SQL 注入式攻击:
当一个 Web 应用程序易于遭受攻击而其结果对攻击者却不见时,就会发生所谓的盲目 SQL 注入式攻击。 有漏洞的网页会根据注入到合法语句中的逻辑语句的结果显示不同的内容。 这种攻击相当耗时,因为必须为每一个获得的字节而精心构造一个新的语句。通过一次次的分析得到的这些结果获取想要的信息。

3 Java Web 下的解决方法:
3.1、利用 Javascript,在客户端进行校验:
通过以上分析我们看到,对于 SQL 注入其实就是利用一些特殊符号实现对数据库的操作。 所以可以利用 JavaScript 对输入的字符进行过滤。
例如:/select|update|delete|exec|count|’|” |=|;|>|<|%/i一些特殊字符和 SQL 关键字。

3.2、在后台,进行程序判定:
但是 JavaScript 有其自身的一些缺陷,因为它是运行在浏览器客户端的一种技术 。 当这个网页保存下来,进行修改页面以跳过这些过虑提交后, JavaScript 就失去作用了 。 所以最好在后台也对这些字符串进行处理 。有良好的编程习惯:

比如判断用户名和密码的时候不要只用:select * from user where username = ? and password =?,然后判断 select 出的结果为 size>0 。 这个方法容易被注入 。

应该用:select password from user where username = ? ,然后用select 出来的 password 和他提交上来的 password 对比一下是否一致 。 所以,如果要预防注入, 就必须要整体设计 、 养成良编程习惯。

3.3、使用 PreparedStatement 连接数据库:
为了解决这个问题,我们可以使用 PreparedStatement 。首先在创建 PreparedStatement 的时候会对sql 进行一次了处理,然后传递参数的时候,没有直接把参数拼接到sql里,采用占位符并且参数中有什么特殊字符, PreparedStatement 也会帮助自动转换 。总之,在使用PreparedStatement 执行查询的时候已经对sql进行了严格的处理,可以防止sql注入。

3.4、利用框架:
当今在 Java Web 领域,比较流行的是使用诸如 Spring、hibernate 等框架来防范风险 。

当HTTP遇到SQL注入:Java开发者的攻防实战手册 编码规范:始终使用预编译语句,禁止字符串拼接框架善用:充分利用Spring、JPA等框架的安全特性输入控制:在系统边界进行严格的输入验证纵深防御:结合WAF、数据库权限控制等基础设施持续改进:通过代码审查、渗透测试持续加固系统// 安全开发的核心原则"所有外部输入都不可信,必须经过验证和转义"; 阅读详情

相关推荐

java的SQL注入与XSS攻击

通过了解和防范SQL注入和XSS攻击,我们能够提高Java应用的安全性,保护用户的信息免受威胁。大家好,欢迎来到本文!在Java开发中,安全问题一直备受关注,其中SQL注入和XSS攻击是两个常见的安全隐患。是一种攻击手段,通过在应用的用户输入中注入恶意的SQL代码,从而篡改、查询或者删除数据库中的数据。攻击者通过构造精巧的输入,使应用误认为这些输入是合法的SQL语句。**XSS攻击(跨站脚本攻击)**则是通过在Web页面中注入恶意脚本,使用户在浏览器上执行这些脚本,从而盗取用户信息或者执行一些恶意操作。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 2万+

SQL盲注攻击详解及防御措施

SQL盲注是一种高级的SQL注入攻击形式,攻击者通过构造特定的SQL查询,根据应用程序的响应来推断数据库的信息。本文将详细介绍SQL盲注的工作原理,并提供具体的代码示例和防御措施。

2301_77163982的博客 926

【漆学军】MT4进阶到MT5速成之路(2)获取持仓

MT5在持仓获取上,要比MT4复杂些,分两部分,获取持仓和挂单采用了不同的方法。 一、获取持仓中的buy和sell单 int b=0;//获取buy单个数 int s=0;//获取sell单个数 double lot_total_buy=0;//获取持仓中buy单的总手数 double lot_total_sell=0;//获取持仓中sell单的总手数 for(int i=0; i<PositionsTotal(); i++) { ulong ticket=Positi

漆学军的编程笔记 1625

在 Java 中预防 SQL 注入,从零基础到精通,收藏这篇就够了!

场景安全做法高风险做法(避免!执行 SQL 查询使用参数化拼接字符串生成 SQL动态表名/列名白名单校验合法值直接拼接用户输入输入验证正则表达式白名单过滤仅在前端验证或不做验证错误信息处理记录日志,返回通用错误提示返回详细数据库错误信息ORM 框架优先使用 Hibernate/JPA 的 Criteria 或 HQL手动拼接 HQL 或 JPQL关键点绝不信任用户输入:所有外部输入(包括 HTTP 请求参数、Cookie、Headers)均需验证和转义。代码审查。

韩束一叶子 2203

大学物理第二章 质点动力学详解

大学物理第二章 质点动力学概念详解

weixin_63026364的博客 1万+

openEuler系统下安装Google Chrome浏览器全攻略(附依赖问题解决方案)

本文详细介绍了在openEuler系统上安装Google Chrome浏览器的完整指南,包括环境准备、多种安装方式、依赖问题解决方案及性能优化技巧。针对openEuler特有的软件生态和依赖管理机制,提供了实用的命令和配置方法,帮助用户克服安装过程中的常见障碍,实现流畅的Chrome使用体验。

hadoop5ranger的博客 1152

Web安全之SQL注入:如何预防及解决

SQL注入是一种通过在用户输入中嵌入恶意SQL代码的攻击方式。攻击者可以利用漏洞在未经授权的情况下访问数据库,执行原本不被允许的操作。例如,攻击者可以绕过身份验证、检索敏感信息,甚至删除数据。SQL注入是Web应用程序中最常见且最危险的安全漏洞之一,尤其是在涉及数据库操作的场景下,如电商交易系统。通过使用、严格的输入验证、最小权限原则以及使用ORM框架等方法,我们可以有效防止SQL注入攻击。开发人员需要养成良好的编码习惯,始终考虑潜在的安全问题,确保应用程序的安全性。

J老熊 2374

手把手教你用Excel自动化处理G14大额风险暴露报表(含211版模板)

本文针对G14大额风险暴露报表(含211版)手工填报效率低、易出错的核心痛点,提供了一套基于Excel VBA的完整自动化解决方案。文章详细讲解了如何构建从数据采集、清洗、关联客户识别、风险暴露计算到自动化校验与归档的完整工作流,并附有可操作的代码示例,旨在帮助银行风控人员大幅提升报表处理效率与准确性。

weixin_29304985的博客 450

Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法...

在前面的博客中,我们详细介绍了: sql注入攻击详解(二)sql注入过程详解 sql注入攻击详解(一)sql注入原理详解 我们了解了sql注入原理和sql注入过程,今天我们就来了解一下sql注入的解决办法。怎么来解决和防范sql注入,由于本人主要是搞javaweb开发的小程序员,所以这里我只讲一下有关于javaweb的防止办法。其实对于其他的,思路基本相似。下面我们先...

红太阳照大地 1020

STM32 | DMA配置和使用如此简单(超详细)

DMA学习很难吗?其实DMA配置和使用如此简单!本文让你无论在DMA认识和理解上(抽象不抽象都有)还是在DMA配置和使用上有个彻彻底底的认识。文章包括寄存器和库函数讲解,省去你自行翻阅使用手册和固件库手册,点到点教会你DMA的配置和使用。

。。。 7万+

使用安卓的IMU数据进行 行人航位推算(PDR)推算步长 附python 代码

加速度计数据、陀螺仪数据、重力传感器数据、姿态仰角数据。数据分析与定位轨迹生成主要使用Python离线完成。示意图。

三维点云技术探索 1916

DVWA靶场通关笔记-SQL盲注(SQL Injection Blind low级别)

DVWA(Damn Vulnerable Web Application)中的 SQL Injection(Blind)布尔盲注关卡是用于练习和演示 SQL 盲注攻击的不同场景,不同安全等级存在不同的风险和绕过方法,本小节对低等级别的关卡进行渗透实战。

mooyuan的网络安全博客 1563

PHP实现获取当地网络时间​(附完整源码)

PHP实现获取当地网络时间​(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 237

sql注入攻击详解(三)sql注入解决办法

在前面的博客中,我们详细介绍了:        sql注入攻击详解(二)sql注入过程详解         sql注入攻击详解(一)sql注入原理详解        我们了解了sql注入原理和sql注入过程,今天我们就来了解一下sql注入的解决办法。怎么来解决和防范sql注入,由于本人主要是搞Java web开发的小程序员,所以

cetinlo的博客 2243

【以太网硬件六】1000base-T物理层编码究竟是怎么编的?

详述1000base-T物理层4D-PAM5的编码过程

highman110的博客 5325

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【Web安全与防御】简析Sql注入与防御措施

引言 最近由于在优快云上看到许多有关SQL注入问题的文章,以前因为是小白,重在学编程技术上,并没有在程序安全防护上大费周章。但是由于学习的路途越走越远,包括前段时间理工大教务处主页被黑(我同学也在网络工作室负责维护),让我深深的感受到,在Web应用上线之后,除了应付“高并发”之类的效率性问题之外,安全性问题也是非常重要的。俗话说的好,“不防君子防小人...

weixin_34280237的博客 538

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

重新学习MySQL数据库11:以Java的视角来聊聊SQL注入

本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客: www.how2playlife.com 本文是微信公众号【Java技术江湖】的《重新学习MySQL数据库》其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有侵权,请联系作者。 该

wr_java的博客 173

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Web开发中的一些安全问题

From:http://blog.sina.com.cn/s/blog_5465f7f20100tuv1.html 1. SQL Injection<SQL注入***> 在Java中, 使用PrepareStatment是不可能产生这样的***的, 通常这类***产生是由于程序员借助一些API,或者配置文件, 动态的修改SQL语句造成的。 如果程...

weixin_33928467的博客 92

用户登录SQL漏洞

补充:数据库自复制:insert into users(username,password,email,grade) select username,password,email,grade from users. 1 SQL漏洞,本人在SQL Sever2008下亲测 因此一般情况下,用户输入任意用户名,密码输为:XXXX'or 1='1就可以验证通过。 一般的代码验证方法:...

weixin_30323961的博客 165

Java学习手册:Web 安全基础

Web 安全是 JavaWeb 开发中不可忽视的重要部分。通过了解常见的 Web 安全威胁,如 SQL 注入、XSS 攻击、CSRF 攻击等,并采取相应的防护措施,可以大大提高应用的安全性。在开发过程中,应遵循安全编码的最佳实践,对用户输入进行严格的验证,对输出进行适当的编码,使用 HTTPS 加密数据传输,安全地管理会话,并定期进行安全审计和监控。通过综合运用这些安全策略,可以有效保护 Web 应用免受各种安全威胁的侵害,保障用户数据的安全和应用的稳定运行。

佩奇的技术笔记 1262

一些Web 漏洞防范的开源框架(一)

在数据绑定和验证过程中,对输入数据进行严格的检查,确保其符合预期的格式和范围。如果数据不合法,会抛出验证异常,阻止后续的处理,从而防止不合法的数据进入系统可能导致的漏洞。- 原理:集中管理应用的状态,通过严格的 mutation 规则,确保状态的修改只能通过预定义的 mutation 函数进行。- SQL 注入防范:对用户输入进行严格的验证和过滤,在进行数据库查询时,使用预编译语句(PreparedStatement),避免拼接 SQL 语句,从而防止恶意用户通过构造特殊的输入来执行非法的 SQL 操作。

m0_57836225的博客 418

Java Web安全防护:SQL注入、XSS攻击的预防与处理

本文深入分析了Web开发中两大常见安全威胁:SQL注入和XSS攻击,并提供了Java环境下的防护方案。针对SQL注入,重点推荐使用预编译语句、ORM框架、输入验证和最小权限原则;针对XSS攻击,强调输出编码、安全模板引擎、CSP策略和HttpOnlyCookie的应用。文章还提出了综合防护策略,包括安全开发生命周期、安全框架使用和定期审计,并给出了一个安全的用户评论系统实现案例,展示了如何将各种防护措施集成到实际项目中。最后强调Web安全是一个持续过程,需要开发者保持安全意识并采用纵深防御策略。

exlink2012的专栏 618

Java安全编码之用户输入

0x00 安全引言 1、传统Web应用与新兴移动应用 (1)传统Web应用:浏览器 HTTP 服务器(2)新兴移动应用:APP HTTP 服务器 从安全角度看,传统Web应用与新兴移动应用没有本质区别 2、Web应用安全的核心问题是什么? 用户提交的数据不可信是Web应用程序核心安全问题 用户可以提交任意输入 例如: √ 请求参数-&gt;多次提交或者不提交√ 修改Cookie...

weixin_34257076的博客 197

java防sql注入详解

我们知道,我们的程序如果扩展性不好,很可能被sql注入,我们可以通过集中方法在避免。 1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和   双"-"进行转换等。   2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。   3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有

java_yuan的专栏 695

Java Web 应用中的 SQL 注入与 XSS 攻击防御方法研究

随着 Java 在企业级开发、Web 应用和分布式系统中的广泛应用,安全问题逐渐成为开发者不可忽视的挑战。常见的安全漏洞往往源于不安全的编码习惯、对输入数据的处理不当以及对敏感信息保护不足。本文将系统分析 Java 编程中的常见安全问题,并结合代码实例,提出切实可行的解决方案。

一键难忘的博客 868
上一篇: Class文件结构
下一篇: 二叉树中相差最大的两个节点间的差的绝对值(层次遍历+递归先序)
SupWTian
博客等级 码龄15年 8粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值