Безопасны ли запросы Spring SpEL от атак SQL-инъекций? - PullRequest
0 голосов
/ 10 мая 2018

Безопасны ли значения SpEL "#{variable}" Spring Expression Language от SQL-атак? Например:

@Mapper
public interface UrlInfoMapper {
    public static final String SELECT_BY_ID = "select * from url WHERE ID=#{ID}";
    public static final String DELETE_BY_ID = "DELETE FROM url WHERE ID=#{ID}";

    @Select(SELECT_BY_ID)
    UrlInfo getFromUrlById(String ID);

    @Update(DELETE_BY_ID)
    void delete(@Param("ID")String ID);

Я проверил ссылку, но не могу найти упоминания о замененных значениях, экранированных для символов SQL, таких как кавычки.

https://docs.spring.io/spring/docs/4.3.17.RELEASE/spring-framework-reference/htmlsingle/#expressions

Я не нашел упоминаний в сети о SpEL и SQL-инъекциях (только JPA, который этот проект не использует).

https://duckduckgo.com/?q=spel+sql+injection&ia=qa

В этих работах обсуждается уязвимость в представлении SpEL, но не в базе данных.

https://www.mindedsecurity.com/fileshare/ExpressionLanguageInjection.pdf

Spring Core 2.6.1, Spring Boot 1.5.6, Spring Expression 4.3.10.

1 Ответ

0 голосов
/ 14 мая 2018

Я верю, что они есть.

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MockTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void sqlInjections() throws Exception {
        User user = userMapper.getUser("admin'--");
        assertNull(user);
    }


@Mapper
public interface UserMapper {

    @Select("select * from user WHERE name =#{name}")
    @Results(value = {
             @Result(property = "name", column = "name"),
             @Result(property = "password", column = "password"),
             @Result(property = "encrypted", column = "encrypted"),
             @Result(property = "permission", column = "permission")
           })
    User getUser(@Param("name")String name);

А

mvn test

Tests run: 5, Failures: 0, Errors: 0, Skipped: 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...