Краткое содержание серии MyBatis:Серия MyBatis
1. Нечеткий запрос
1.1, абстрактный интерфейс
List<Map<String,Object>> selectLIKEUser(Map<String,Object> parmsMap);
1.2, XML
- Посмотрите это, чтобы узнать, почему поле
like
Если вы хотите обернуть его плавающим числом, верно?
<select id="selectLIKEUser" resultType="map" parameterType="map">
select
*
from
user
where
name like "%"#{name}"%"
</select>
1.3, тестовый класс
@Test
public void selectLIKEUser() {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
Map<String,Object> parmsMap = new HashMap<>();
parmsMap.put("name","面");
List<Map<String,Object>> resultList = mapper.selectLIKEUser(parmsMap);
for (Map map: resultList){
System.out.println(map);
}
session.close();
}
1.4, результат выполнения
- данные
- результат
2. SQL инъекция
2.1#
и$
разница
-
#
Входящие данные в виде строки, входящие данные автоматически добавляют двойную кавычку. -
$
Входящие данные напрямую отображаются и генерируются в sql. -
#
Этот метод может в значительной степени предотвратить внедрение SQL,$
Невозможно предотвратить внедрение Sql. -
$
Этот метод обычно используется для передачи объектов базы данных, таких как передача имени таблицы. - Обычно полезно
#
не используй$
Если бы вам пришлось использовать“${xxx}”
Такие параметры следует фильтровать вручную, чтобы предотвратитьSQL注入攻击
.
2.2,#
и$
проверять
① Мы используем log4j для вывода оператора выполнения SQL на консоль.
- импортная банка
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.6.1</version>
</dependency>
- log4j2.properties
log4j.rootLogger=DEBUG,console,file
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=log/tibet.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=ERROR
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=INFO
- ContextAplication.xml
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"></setting>
</settings>
- Таким образом включается вывод логов, здесь представлены только самые простые, а логи log4j подробно не объясняются.
②SQL-xml
#
<select id="getUserInfoById" resultType="com.dbright.pojo.User">
select * from user where id = #{id}
</select>
$
<select id="getUserInfoById" resultType="com.dbright.pojo.User">
select * from user where id = ${id}
</select>
③ Выполняйте результаты отдельно
#
$
2.3 Как имитировать SQL-инъекцию?
- Внедрить недопустимое утверждение:
- Результат: Все данные найдены, небезопасны
- Как это решить?
- может быть использован
#
затем применить - должен использовать
$
В случае добавьте проверку на уровне службы, например, в нашем примере, принимайте только параметры типа int. - Или просто оцените, превышает ли параметр длину, потому что оператор инъекции обычно очень длинный!
- может быть использован
Впереди долгий путь, и я обязательно буду его искать вдоль и поперёк~
Если вы думаете, что я блогеры хорошо пишу! Писать нелегко, пожалуйста, ставьте лайки, подписывайтесь и комментируйте, чтобы поощрять блоггеров ~ хахах