Python MySQL의 IN 절 내에 목록 중첩
P粉781235689
2023-08-22 17:04:59
<p>목록을 문자열로 매핑하는 방법을 알고 있습니다.</p>
<pre class="brush:php;toolbar:false;">foostring = ",".join( map(str, list_of_ids) )</pre>
<p>다음을 사용하여 해당 문자열을 IN 절에 넣을 수 있다는 것을 알고 있습니다. </p>
<pre class="brush:php;toolbar:false;">cursor.execute("DELETE FROM foo.bar WHERE baz IN ('%s')" % (foostring))</pre>
<p>MySQL 데이터베이스에서 동일한 기능을 안전한 방법(SQL 주입 방지)으로 구현해야 합니다. 위의 예에서는 foostring이 실행을 위한 매개변수로 전달되지 않았기 때문에 취약합니다. 또한 MySQL 라이브러리 외부에서 인용 및 이스케이프 작업을 수행해야 합니다. </p>
<p> (관련 SO 질문이 있지만 거기에 나열된 답변은 MySQL 데이터베이스에서 작동하지 않거나 SQL 삽입 공격에 취약합니다.) </p>
오래된 질문이지만 혹시 제가 찾는 정보를 혹시 다른 분들도 찾고 계실까 싶어 답글을 남겨봅니다
매개변수가 많거나 명명된 매개변수를 사용하려는 경우 허용되는 답변이 혼란스러워집니다
몇 번 시도한 끝에
으아악테스트를 거쳐
에 합격했습니다.python2.7
和pymysql==0.7.11
직접 사용
으아악list_of_ids
:이렇게 하면 인용을 피하고 다양한 SQL 주입 문제를 피할 수 있습니다.
데이터(
list_of_ids
)는 쿼리 텍스트가 아닌 매개변수로 mysql의 드라이버에 직접 전달되므로 삽입 문제가 없습니다. 문자를 제거하거나 인용하지 않고도 문자열의 모든 문자를 유지할 수 있습니다.