SQL中#和$之间的差异
区别:
(1)#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是id,则解析成的sql为order by "id"。
(2)$将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是id,则解析成的sql为order by id。
(3)#方式在很大程度上能够防止sql注入。
(4)$方式无法防止sql注入。
(5)$方式一般用于传入数据库对象,例如传入表名。(这里得注意SQL注入问题)
(6)一般能用#的就别用$。
ps:在使用mybatis中还遇到<![CDATA[]]>的用法,在该符号内的语句,将不会被当成字符串来处理,而是直接当成sql语句,比如要执行一个存储过程。
总结区别:#{} 传入值时,sql解析时,参数是带引号的,而${}穿入值,sql解析时,参数是不带引号的。
举个例子:
select * from ${table_Name} where name = #{name}
在这个例子中,如果表名为
user; delete user; --
则动态解析之后 sql 如下:
select * from user; delete
user; -- where name = ?;
--之后的语句被注释掉,而原本查询用户的语句变成了查询所有用户信息+删除用户表的语句,会对数据库造成致命损伤。
但是表名用参数传递进来的时候,只能使用 ${} 。这也提醒在这种用法中要小心sql注入的问题。
防止SQL注入方法:
首先,永远不要相信用户的输入。
(1)不使用SQL,考虑NoSQL。
(2)正则表达式,字符串过滤。
(3)参数绑定PreparedStatement。
(4)使用正则表达式过滤传入的参数。
(5)JSP中调用该函数检查是否包函非法字符或JSP页面判断代码。JSP参考JSP使用过滤器防止SQL注入
以上个人拙作,希望能给路上同仁带去点光。
若不小心对你有启发,评论留下你的故事,点赞分享让更多人为你受益。
上一篇: MySQL 删除重复的行(去重留一)
下一篇: SQL除法运算:处理数据库中的除法运算
推荐阅读
-
踞觑yuv422、yuv420和yuv444间的差异
-
在内存中,YUV420、YUV422和RGB32的占用情况
-
比较YU12、I420、YV12、NV12、NV21、YUV420P、YUV420SP、YUV422P和YUV444P的图解差异
-
不同YUV格式的解读:YU12、I420、YV12、NV12、NV21、YUV420P、YUV420SP、YUV422P和YUV444P的差异解析
-
将Android中的YUV_420_888编码Image转换为I420和NV21格式的byte数组
-
深入探讨图像处理的基础知识:yuv420的转换方式与rgb、bayer和yuv、RGB之间的转换机制解析
-
Java 8新特性探究(十三)JavaFX 8新特性以及开发2048游戏-JavaFX历史## 跟java在服务器端和web端成绩相比,桌面一直是java的软肋,于是Sun公司在2008年推出JavaFX,弥补桌面软件的缺陷,请看下图JavaFX一路走过来的改进 从上图看出,一开始推出时候,开发者需使用一种名为JavaFX Script的静态的、声明式的编程语言来开发JavaFX应用程序。因为JavaFX Script将会被编译为Java bytecode,程序员可以使用Java代码代替。 JavaFX 2.0之后的版本摒弃了JavaFX Script语言,而作为一个Java API来使用。因此使用JavaFX平台实现的应用程序将直接通过标准Java代码来实现。 JavaFX 2.0 包含非常丰富的 UI 控件、图形和多媒体特性用于简化可视化应用的开发,WebView可直接在应用中嵌入网页;另外 2.0 版本允许使用 FXML 进行 UI 定义,这是一个脚本化基于 XML 的标识语言。 从JDK 7u6开始,JavaFx就与JDK捆绑在一起了,JavaFX团队称,下一个版本将是8.0,目前所有的工作都已经围绕8.0库进行。这是因为JavaFX将捆绑在Java 8中,因此该团队决定跳过几个版本号,迎头赶上Java 8。 ##JavaFx8的新特性 ## ###全新现代主题:Modena 新的Modena主题来替换原来的Caspian主题。不过在Application的start方法中,可以通过setUserAgentStylesheet(STYLESHEET_CASPIAN)来继续使用Caspian主题。 参考http://fxexperience.com/2013/03/modena-theme-update/ ###JavaFX 3D 在JavaFX8中提供了3D图像处理API,包括Shape3D (Box, Cylinder, MeshView, Sphere子类),SubScene, Material, PickResult, LightBase (AmbientLight 和PointLight子类),SceneAntialiasing等。Camera类也得到了更新。从JavaDoc中可以找到更多信息。 ###富文本 强化了富文本的支持 ###TreeTableView ###日期控件DatePicker 增加日期控件 ###用于 CSS 结构的公共 API
-
磁盘分区和创建文件系统在Linux(十三)中的挂载
-
远程访问和虚拟化串口在Linux系统中的应用
-
详解Linux系统中的磁盘挂载和卸载过程,深入探讨挂载点、命令以及最佳实践