jdbc PreparedStatement 防止sql注入的关键代码片段
2024-10-21 06:25:08
mysql-connector-java-5.1.38.jar
PreparedStatement 的 setString(int parameterIndex, String x) 方法
for (int i = 0; i < stringLength; ++i) {
char c = x.charAt(i); switch (c) {
case 0: /* Must be escaped for 'mysql' */
buf.append('\\');
buf.append('0'); break; case '\n': /* Must be escaped for logs */
buf.append('\\');
buf.append('n'); break; case '\r':
buf.append('\\');
buf.append('r'); break; case '\\':
buf.append('\\');
buf.append('\\'); break; case '\'':
buf.append('\\');
buf.append('\''); break; case '"': /* Better safe than sorry */
if (this.usingAnsiMode) {
buf.append('\\');
} buf.append('"'); break; case '\032': /* This gives problems on Win32 */
buf.append('\\');
buf.append('Z'); break; case '\u00a5':
case '\u20a9':
// escape characters interpreted as backslash by mysql
if (this.charsetEncoder != null) {
CharBuffer cbuf = CharBuffer.allocate(1);
ByteBuffer bbuf = ByteBuffer.allocate(1);
cbuf.put(c);
cbuf.position(0);
this.charsetEncoder.encode(cbuf, bbuf, true);
if (bbuf.get(0) == '\\') {
buf.append('\\');
}
}
// fall through default:
buf.append(c);
}
}
最新文章
- 为什么我们要给父级元素写overflow:hidden
- Docker入门教程(二)命令
- HTML5标准简介
- C# 快速反射 IL
- 阶段小项目1:循环间隔1秒lcd显示红绿蓝
- 在android studio中配置运行时签名
- BZOJ1014[JSOI2008]火星人——非旋转treap+二分答案+hash
- 使用 vscode + chrome debuger断点调试 Vue 程序
- mysql架构解读~mysql的多源复制
- SSH框架下的表单重复提交
- CPU UsageTimes Profile (cpu=times)
- 【ElasticSearch】:Mapping相关
- 浅谈final修饰的变量
- jQuery live事件说明及移除live事件方法
- webgl绘制粗线段
- 【FCS NOI2018】福建省冬摸鱼笔记 day1
- Unity3d通用工具类之NGUI图集分解
- iOS中UIImage转换为NSData 方法
- 【转】正向代理vs反向代理
- Java中split的用法
热门文章
- iDempiere的用户密码加密处理(AD_User.Password)(Postgresql 9.1)
- 利用pandas进行数据分析之三:DataFrame与Series基本功能
- 【MyBatis学习08】高级映射之一对一查询
- MySQL学习总结(五)表数据查询
- Windows GDI 映射模式(出自:Windows程序设计第5版-珍藏版)
- C/C++ 错误笔记-在给结构体中的指针赋值时,要注意该指针是否已指向内存空间
- libpcap丢包原理分析及Fedora 9 内核2.6.25.14下安装PF-RING的详细过程
- Magical GCD UVA 1642 利用约数个数少来优化 给定n个数,求使连续的一段序列的所有数的最大公约数*数的数量的值最大。输出这个最大值。
- 虚拟化笔记05 OpenFiler configuration
- CentOS 6.5 安装Gitlab 7.12.2