Java - 转义字符串以防止SQL注入

2023-11-22

我试图在java中放置一些反sql注入,但发现使用“replaceAll”字符串函数非常困难。最终我需要一个函数来转换任何现有的\ to \\, any " to \", any ' to \',以及任何\n to \\n这样当 MySQL 评估该字符串时,SQL 注入就会被阻止。

我已经提取了一些我正在使用的代码以及所有\\\\\\\\\\\功能让我眼花缭乱。如果有人碰巧有这样的例子,我将不胜感激。


PreparedStatements 是正确的选择,因为它们使 SQL 注入变得不可能。这是一个以用户输入作为参数的简单示例:

public insertUser(String name, String email) {
   Connection conn = null;
   PreparedStatement stmt = null;
   try {
      conn = setupTheDatabaseConnectionSomehow();
      stmt = conn.prepareStatement("INSERT INTO person (name, email) values (?, ?)");
      stmt.setString(1, name);
      stmt.setString(2, email);
      stmt.executeUpdate();
   }
   finally {
      try {
         if (stmt != null) { stmt.close(); }
      }
      catch (Exception e) {
         // log this error
      }
      try {
         if (conn != null) { conn.close(); }
      }
      catch (Exception e) {
         // log this error
      }
   }
}

无论姓名和电子邮件中包含什么字符,这些字符都将直接放入数据库中。它们不会以任何方式影响 INSERT 语句。

不同的数据类型有不同的设置方法——您使用哪一种取决于您的数据库字段是什么。例如,如果数据库中有一个 INTEGER 列,则应该使用setInt方法。PreparedStatement 文档列出了可用于设置和获取数据的所有不同方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java - 转义字符串以防止SQL注入 的相关文章

  • 文本在指定长度后分割,但不要使用 grails 打断单词

    我有一个长字符串 需要将其解析为长度不超过 50 个字符的字符串数组 对我来说 棘手的部分是确保正则表达式找到 50 个字符之前的最后一个空格 以便在字符串之间进行彻底的分隔 因为我不希望单词被切断 public List
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • 如何在 Postgresql 中将 GIST 或 GIN 索引与 hstore 列一起使用?

    我正在使用 postgresql 9 3 的 hstore 我正在尝试对 hstore 列使用索引就像文档所述 http www postgresql org docs 9 3 static hstore html 我的问题是索引似乎没有被
  • Android 中 localTime 和 localDate 的替代类有哪些? [复制]

    这个问题在这里已经有答案了 我想使用从 android API 获得的长值 该值将日期返回为长值 表示为自纪元以来的毫秒数 我需要使用像 isBefore plusDays isAfter 这样的方法 Cursor managedCurso
  • 如何在java Spring Boot中实现通用服务类?

    我有许多具有重复代码的服务 我想知道如何实现通用服务 以便我的所有服务都可以扩展它 服务接口示例 重复代码 Service public interface IUserService List
  • Zend RegEx Validator 的自定义有意义的错误消息

    我正在验证表单中的文本字段 如下所示 name new Zend Form Element Text name name gt setLabel First Name gt setRequired true gt addFilter new
  • 什么是更好的?子查询或内连接十个表?

    一个旧系统已抵达我们的办公室进行一些更改和修复 但它也存在性能问题 我们并不确切知道这种缓慢的根源是什么 当我们重构旧代码时 我们发现了几个具有以下模式的 sql 查询 出于示例目的 简化了查询 SELECT SELECT X FROM A
  • 如何通过注解用try-catch包装方法?

    如果应该在方法调用中忽略异常 则可以编写以下内容 public void addEntryIfPresent String key Dto dto try Map
  • 添加到列表时有没有办法避免循环?

    我想知道这样的代码 List
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • 在 Clojure 中解压缩 zlib 流

    我有一个二进制文件 其内容由zlib compress在Python上 有没有一种简单的方法可以在Clojure中打开和解压缩它 import zlib import json with open data json zlib wb as
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • 匹配没有周围字符列表的单词列表

    我有这个正则表达式 one common word or another 除非这两个单词相邻 否则它匹配得很好 One one s more word word common word or another word more anothe
  • Lombok @Builder 不创建不可变对象?

    在很多网站上 我看到 lombok Builder 可以用来创建不可变的对象 https www baeldung com lombok builder singular https www baeldung com lombok buil
  • Postgres 按查询分组

    我正在尝试在 postgres 的查询中使用 group by 我无法让它按照我想要的方式工作 以便根据需要对结果进行分组 这是另一个堆栈问题的扩展我刚刚回答过的递归查询 https stackoverflow com questions
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向
  • 即使调整大小,如何获得屏幕的精确中间位置

    好的 这个问题有两部分 当我做一个JFrame 并在其上画一些东西 即使我将宽度设置为 400 并使其在一个项目击中它时 当然 允许项目宽度 它会反弹回来 但由于某种原因 它总是偏离屏幕约 10 个像素 有没有办法解决这个问题 或者我只需要

随机推荐

  • 带有字符串数组参数的 PowerShell 脚本的计划任务

    我创建了一个可以从 Management Shell 完美运行的 PowerShell 脚本 我正在尝试将其设置为在 Windows Server 2008 R2 中的计划任务中工作 但不确定如何传递字符串数组参数的参数 这是我的脚本的相关
  • 通过多路径刷图绘制 d3.js Focus+Context 时遇到问题

    我已经研究了几周了 似乎无法弄清楚如何绘制具有多个路径的下面的图表 通过刷图聚焦 上下文 我尝试创建一个 jsfiddle 但无法复制我得到的屏幕 此时 我所拥有的与原始图表类似 只是只有一条路径而不是区域 并且刷牙有效 基本上尝试将焦点图
  • 确定德州扑克牌局获胜者的算法

    好的 我正在为我的高级项目制作德州扑克人工智能 我已经创建了图形用户界面和投注 交易程序 但我已经达到了需要确定谁赢了手的部分 并且我不知道解决此问题的最佳方法 顺便说一句 我正在使用 python ATM 我有 2 个列表 一个用于 7
  • 如何使用命令行从私有 github 存储库下载单个原始文件?

    在 CI 服务器上 我想获取我们在 Github 上维护的配置文件 以便可以在多个作业之间共享 我试图通过curl获取这个文件 但是这些方法都失败了 我得到了404 As advised by the oAuth docs curl H A
  • 在启用加密文件系统的情况下从 C# 创建新目录

    有人在启用加密文件系统的情况下从 C 创建了新目录吗 此外 任何有关通过安装执行此操作的信息也会很有帮助 创建加密目录需要两个步骤 使用 Directory CreateDirectory 创建它 然后使用 Win32 函数 Encrypt
  • 我可以在 SQLAlchemy 中创建临时表而不附加到 Table._prefixes 吗?

    我想在 SQLAlchemy 中创建一个临时表 我可以建立一个CREATE TABLE声明与TEMPORARY通过调用子句table prefixes append TEMPORARY 反对Table对象 但这不如table select
  • 如何使用 JavaScript 设置 Chrome 扩展的文件下载位置?

    您好 我正在使用 Chrome 扩展程序下载选定的链接 但我无法设置下载位置 所有的url都下载到chrome的默认位置 我知道出于安全原因我们不能这样做 我们可以在 Chrome 扩展弹出窗口中提示目录选择器对话框吗 用户可以从这里选择下
  • “将 varchar 值‘NULL’转换为数据类型 int 时转换失败”

    当我将记录插入长表时 出现错误 将 varchar 值 NULL 转换为数据类型 int 时转换失败 如何确定哪一列出现错误 该表有很多字段和数百万条记录 当我尝试将 NULL 字符串插入整数列中的某处时 每次迭代都需要 10 分钟才能完成
  • django、python 和链接加密

    我需要安排某种加密来生成用户特定的链接 用户将单击此链接 在其他视图中 带有加密字符串的相关链接将被解密并返回结果 为此 我需要某种加密函数 它消耗一个数字 或字符串 它是绑定到用户帐户的所选项目的主键 还消耗某种种子并生成将被解密的加密代
  • 如何使用 JMESPath 将两个数组(“keys”和“values”)组合成一个对象?

    我有一个包含两个数组的 JSON 对象 一个keys数组和一values数组 两者长度相同 使用 jmespath 我想使用以下值构造一个新对象keys数组作为键和值values数组作为值 例如array combine in PHP 例如
  • 解析 html 时为什么有时需要 item.text 而其他则需要 item.text_content()

    还在学习lxml 我发现有时无法使用 item text 从树中获取项目的文本 如果我使用 item text content 我就可以开始了 我还不确定我明白为什么 任何提示将不胜感激 好吧 我不确定如何在不让您处理文件的情况下提供示例
  • Swagger错误Springboot无法解析名称为“forward:/swagger-ui/index.html”的视图

    Springboot 2 5 13 swagger2 实现 io springfox springfox boot starter 3 0 0 实现 io springfox springfox swagger ui 3 0 0 运行时错误
  • ARC 下的 stringWithFormat 与 initWithFormat

    stringWithFormat 是一个类方法NSString 并返回一个自动释放的字符串 initWithFormat 是一个实例方法 在 ARC 之前 程序员必须负责返回对象的内存管理 如果我们打开ARC 这两种方法有什么区别 With
  • 如何使用 PIL 从图像中剪切自定义形状?

    我想截一张图 比如说 使用另一张具有透明背景的图片 如下所示 并得到如下结果 如何使用 Python PIL Pillow 实现此目的 或者任何其他库 但它必须是Python 的 我们打电话吧source png到第一张图像 并且mask
  • EF Core 3,优化大量 Include/ThenInclude

    我有一个这样的查询 return await ctx Activities Include a gt a Attributes Include a gt a Roles Include a gt a Bookmarks Include a
  • 如何让 Grunt 等待一个任务完成后再运行另一个任务?

    这是我的咕噜文件和output 正如您在输出中看到的 存在一些与异步任务相关的问题 imagemin被叫到 下一个就直接出现了 这使得它的输出出现在任务的最后 相当混乱 build 这是一个自定义任务 is using var done t
  • Electron 中的 WebRTC 屏幕共享

    我们有一个网络应用程序 我通过在 browserWindow 中加载 URL 来构建电子应用程序 但是当我尝试共享屏幕时 它会弹出一个窗口 提示请安装 janus webRTC 屏幕共享插件并重新启动浏览器 请帮忙 您需要在电子中实现自己的
  • 为什么使用 JOIN 子句而不是 WHERE 条件?

    我针对 Oracle 数据库进行开发 当我需要手动编写时 不使用像 hibernate 这样的 ORM 我使用 WHERE 条件而不是 JOIN 例如 这只是为了说明风格 Select from customers c invoices i
  • web.xml 验证错误

    我的 web xml 中又出现一个错误 无法将名称 javaee web appType 解析为 类型定义 组件 和 web xml 文件
  • Java - 转义字符串以防止SQL注入

    我试图在java中放置一些反sql注入 但发现使用 replaceAll 字符串函数非常困难 最终我需要一个函数来转换任何现有的 to any to any to 以及任何 n to n这样当 MySQL 评估该字符串时 SQL 注入就会被