zoukankan      html  css  js  c++  java
  • 【JSP思考】JSP中#{},${}和%{}的区别

    JSP中#{},${}%{}的区别:

    #{}

    #{}:对语句进行预编译,此语句解析的是占位符?,可以防止SQL注入, 比如打印出来的语句 select * from table where id=?,预编译之后会变成select * from table where id = "1 or 1 = 1"。给注入信息加上了引号,替换掉了,所以可以防止注入。

    类比:Java中的PreparedStatement
    预编译:预编译是做些代码文本的替换工作。是整个编译过程的最先做的工作。

    例如,C语言的宏定义#define pi 3.14,就是把对应的变量单纯的替换掉了。
    我们这里的Java预编译,也就是把字符串本应该去掉的双引号(""),给原封不动得带上,单纯的替换掉了,不改变双引号。
    比如,第一个占位符设置的是"Nemo",那这个占位符就原封不动得把"Nemo"(带上双引号) 给单纯的替换掉。这样可以防止注入,导致我们sql语句的结构被改变。

    ${}

    ${}:则是不能防止SQL注入打印出来的语句 select * from table where id=2 实实在在的参数拼接而成,可能会被注入select * from table where id = 1 or 1 = 1

    类比:Java中的Statement

    %{}

    %{}:用在ognl表达式中是保证'{' 和 '}'之间的内容是OGNL表达式取值方式的

    ognl表达式 即 对象导航图语言,用点来代替getset方法的调用,如配置文件properties中的. 。
    如setName 我们可以使用.name
    相当于oc中的点方法

  • 相关阅读:
    systemd 介绍
    Goland读取配置文件--viper包
    Goland日志记录
    进程查询端口占用
    Python zip() 函数
    Jenkins权限管理(角色权限)
    Django ORM查询总结
    如何查看windows计算机重启记录
    Django ORM迁移
    Django中文乱码解决
  • 原文地址:https://www.cnblogs.com/blknemo/p/13764713.html
Copyright © 2011-2022 走看看