oracle "order by" 부품에서 SQL 주입 방지
데이터를 얻기 위해 sql 쿼리를 만들고 있습니다 :)
물론 필터링하고 주문하는 부분도 있습니다.
결과를 얻으려면 "NamedParameterJdbcTemplate"를 사용하고 "위치" 부분에 무언가를 추가해야 할 때, 주입을 방지하기 위해 매개 변수 맵을 사용합니다.
그러나 자동 이스케이프(및 SQL의 일부)가 없기 때문에 "주문 기준" 부분과는 다릅니다.이 주문 부분은 사용자의 데이터(직접)로 채워지기도 하고, 내부 코드에서 추가 정렬 매개 변수를 넣기도 합니다.한 가지 문제가 있습니다. 때로는 이 정렬 필드에 열 이름뿐만 아니라 SQL 문도 포함됩니다.
이제 정렬을 위한 각 매개 변수는 일부 문자(예: ')를 빈 문자열로 대체하여 수동으로 이스케이프되지만 코드에 대해 설정한 일부 매개 변수는 이 규칙을 통과하기에는 다소 복잡합니다.
jdbc 템플릿을 사용할 때 쿼리의 정렬 부분에서 SQL 주입을 방지하는 가장 좋은 방법은 무엇입니까?
데이터베이스 측에서 SQL 주입을 방지하려면 다음을 참조하십시오.DBMS_ASSERT
기본 제공 Oracle 패키지: http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_assert.htm
당신은 찾을 수 있습니다.SIMPLE_SQL_NAME
기능은 SQL 주입으로부터 보호하는 데 도움이 됩니다.ORDER BY
절
도움이 되길...
정렬 순서 선택을 제한할 수 있습니다.대부분의 응용프로그램은 사용자가 표시된 열을 기준으로만 정렬할 수 있으며, 사용자는 열 위치를 기준으로 정렬할 열을 선택할 수 있습니다.
이 경우 사용자의 정수만 사용할 수 있습니다( 내림차순으로 정렬하려면 음수를 사용할 수 있음).정수 목록을 수락하여 사용자가 여러 열을 기준으로 정렬할 수 있습니다.
정수는 쉽게 확인할 수 있으므로 기본 열 이름이 사용자에게 노출되지 않습니다.
하지만 약간 다른 이유로 사용한 한 가지 방법은 Order By 3,2(세 번째 열, 두 번째 열)를 사용하는 것이었습니다.
따라서 사용자 위치가 입력한 열 이름을 출력 열에서 확인할 수 있는 경우 간접적으로 주입 벡터를 죽여야 합니다.
언급URL : https://stackoverflow.com/questions/9064541/prevent-sql-injection-in-oracle-order-by-part
'programing' 카테고리의 다른 글
SQL Server 2016 - 잘못된 개체 이름 'hibernate_sequence' (0) | 2023.07.21 |
---|---|
Oracle 번호 및 varchar 조인 (0) | 2023.07.21 |
이진 트리를 구현하는 방법은 무엇입니까? (0) | 2023.07.21 |
스파크 데이터 프레임 열에서 최대값을 가져오는 가장 좋은 방법 (0) | 2023.07.21 |
테스트 사례에 사용되는 "setUp" 및 "tearDown" Python 방법 설명 (0) | 2023.07.21 |