当前位置: 首页 > news >正文

谷歌网站质量指南平顶山做网站多少钱

谷歌网站质量指南,平顶山做网站多少钱,微信网页版图片,河北康城建设集团网站# 和 $ 的区别 在MyBatis中#xff0c;# 和 $ 是用来处理参数的两种不同方式#xff0c;它们之间有一些重要的区别#xff1a; # 符号#xff1a; # 是用来进行参数占位符的#xff0c;它会进行 SQL 注入防护。使用 # 时#xff0c;MyBatis 会将参数值进行预处理…# 和 $ 的区别 在MyBatis中# 和 $ 是用来处理参数的两种不同方式它们之间有一些重要的区别 # 符号 # 是用来进行参数占位符的它会进行 SQL 注入防护。使用 # 时MyBatis 会将参数值进行预处理以防止 SQL 注入的问题。 当你在 SQL 语句中使用 #{parameterName} 时MyBatis 会将 parameterName 所代表的参数值转义安全地插入 SQL 语句中。 例如 SELECT * FROM users WHERE username #{username}如果 username 是一个用户输入的值MyBatis 会处理这个值并确保不会引起 SQL 注入。 $ 符号 $ 用于直接插入参数值不进行任何处理。这意味着使用 $ 的时候如果参数包含恶意 SQL 代码可能会导致 SQL 注入问题。 当你在 SQL 语句中使用 ${parameterName} 时MyBatis 会直接将 parameterName 的值替换到 SQL 语句中。 例如 SELECT * FROM ${tableName}如果 tableName 是用户输入的值直接插入可能会导致安全风险。 总结 **使用 #**安全参数经过转义防止 SQL 注入。适用于 SQL 中的条件值或数据列。**使用 $**不安全参数不经过处理直接替换。一般用于列名、表名等需要动态命名的场景但需谨慎使用。 在实际使用中建议优先使用 #只有在确实需要动态 SQL 结构时才考虑使用 $并确保传入的内容是安全可信的。 #{} 和${} 区别 1. #{}预编译处理, ${}字符直接替换 2. #{} 可以防⽌SQL注⼊, ${}存在SQL注⼊的⻛险, 查询语句中, 可以使⽤ #{} ,推荐使⽤ #{} 3. 但是⼀些场景, #{} 不能完成, ⽐如 排序功能, 表名, 字段名作为参数时, 这些情况需要使⽤${} 4. 模糊查询虽然${}可以完成, 但因为存在SQL注⼊的问题,所以通常使⽤mysql内置函数concat来完成 sql注入 下面是一个示例展示了如何通过使用 $ 符号导致 SQL 注入的情况 假设我们有一个 MyBatis 的 Mapper XML 文件其中定义了一个可插入表名的 SQL 查询 mapper namespacecom.example.UserMapperselect idgetUsersByTable resultTypecom.example.UserSELECT * FROM ${tableName} WHERE username #{username}/select /mapper在这个查询中${tableName} 采用了 $ 符号表示我们希望动态插入一个表名而 #{username} 采用了 # 符号确保了对用户输入的 username 进行了安全的处理。 SQL 注入示例 假设调用这个方法的 Java 代码如下 String userInputTableName users; DROP TABLE users; --; // 用户输入的表名 String username exampleUser;ListUser users userMapper.getUsersByTable(userInputTableName, username);在上面的代码中userInputTableName 是来源于不受信任的用户输入。如果用户输入了恶意的 SQL 片段 users; DROP TABLE users; --那么最终生成的 SQL 会是 SELECT * FROM users; DROP TABLE users; -- WHERE username exampleUser这个查询会导致数据库首先执行 SELECT * FROM users;然后在同一个执行上下文中执行 DROP TABLE users;从而将 users 表删除。 解决方案 为了防止这种 SQL 注入应该避免在 SQL 语句中使用 ${} 直接插入来自用户的输入。应该采用以下做法 使用预定义表名使用固定值或通过查证安全的值来避免用户直接输入可能的表名。使用 # 符号对于需要而不应该通过用户直接控制的内容避免动态 SQL。 例如我们可以用一个枚举或其他安全措施来限制表名 // 使用合法的表名防止SQL注入 ListUser users userMapper.getUsersByTable(users, username);总之任何时候都应谨慎对待 SQL 的构建特别是涉及到用户输入时确保不使用 $ 来动态插入外部输入内容以防止 SQL 注入漏洞。 # 与 $ 分别适用的场景 在 MyBatis 中# 和 $ 各自适用于不同的场景。下面结合代码示例来描述它们的适用场景 使用 # 的场景 # 符号用于安全地绑定参数适合用于绑定查询条件、列值等情境确保参数得到转义以避免 SQL 注入。 示例 mapper namespacecom.example.UserMapperselect idgetUserByUsername resultTypecom.example.UserSELECT * FROM users WHERE username #{username}/select /mapper使用方式 String username exampleUser; User user userMapper.getUserByUsername(username);在这个示例中#{username} 会被 MyBatis 安全处理防止 SQL 注入。这里 # 的使用是非常合适的因为 username 由用户输入可能会包含潜在的恶意内容。 使用 $ 的场景 $ 符号用于动态构建 SQL 中的结构比如表名或列名等适合参数值是已知的、受控的不需要转义的场景。使用市在容易导致 SQL 注入时要十分谨慎仅在确实安全的情况下才使用。 示例 mapper namespacecom.example.UserMapperselect idgetUsersByTableName resultTypecom.example.UserSELECT * FROM ${tableName} WHERE username #{username}/select /mapper使用方式 String tableName users; // 确保这是一个受控值 String username exampleUser; ListUser users userMapper.getUsersByTableName(tableName, username);在这个示例中${tableName} 用于动态选择表名。在实际使用中tableName 应该是一个固定的值确保不会来自于不受信任的用户输入以避免 SQL 注入。 总结 使用 # 的场景 查询条件、列值等动态内容任何来自用户输入的值需要安全处理以防止 SQL 注入的场景 使用 $ 的场景 动态构建 SQL 的结构部分如表名和列名受控且安全的值不应直接来自用户输入 在编写 MyBatis SQL 时务必小心选择使用 # 或 $ 以保护应用程序的安全性。建议优先使用 #只有在必要且安全的情况下才使用 $。
http://www.dnsts.com.cn/news/175524.html

相关文章:

  • 传媒网站如何设计在家做网站编辑
  • 做企业网站要不要我们自己提供网站相关的图片?酒店预定网站建设方案
  • 凡科做的网站为什么搜不到北湖区网站建设服务商
  • 腾冲住房和城乡建设局网站商业网点消防规范
  • 做问卷赚钱最好似网站建设银行保定分行网站
  • 域名备案好了后怎么做网站wordpress 502
  • 电商类公司网站应该怎么搭建网站建设平台用乐云践新
  • 网站划分栏目为什么自己做不出一个好网站
  • 公司网站开发项目管理制度程序开发软件有哪些
  • mooc网站建设广告英语
  • 网站开发 需求app推广30元一单
  • 妇联网站建设方案wordpress备案号无显示
  • 企业网站的常见类型有网络营销的功能是什么
  • 宁波网站seo哪家好秦皇岛网站制作 微商城建设
  • 嘉兴网站建设一薇怎么修改wordpress 后台路径
  • 做天猫网站价格表网易 自助网站建设
  • wap网站优化厦门 微网站制作
  • 临邑县建设局网站下载百度免费
  • 厦门建设局网站技司学校抄袭网站案例
  • 余姚网站推广公司html5制作手机网站
  • 海口制作网站软件网站 制作 工具
  • 网站点击推广京东网上购物商城
  • 网站后台安全性wordpress点击图片悬浮
  • 如何选择网站定制公司本地生活网站建设
  • 做一个网站页面多少钱南宁网络建站
  • 花都营销型网站什么视频直播网站做挣钱
  • 滁州公司做网站2345网址导航浏览器下载
  • 网站后台管理系统数据库企业网站的cms
  • 网站设置黑白色关于网站建设的图片
  • 百度做网站按点击量收费吗网页美工设计总结