면책 조항 : 저는 아직 장고를 배우기 때문에 여기에 뭔가 빠져 있을지 모르지만 그게 뭔지 알 수는 없습니다 ...잠재적 인 장고 버그가있는 QuerySet.query?
저는 Python 2.6.1 및 Django 1.2.1을 실행하고 있습니다.
(InteractiveConsole)
>>> from myproject.myapp.models import *
>>> qs = Identifier.objects.filter(Q(key="a") | Q(key="b"))
>>> print qs.query
SELECT `app_identifier`.`id`, `app_identifier`.`user_id`,
`app_identifier`.`key`, `app_identifier`.`value` FROM
`app_identifier` WHERE (`app_identifier`.`key` = a OR
`app_identifier`.`key` = b)
>>>
"a"또는 "b"주위에 따옴표가 붙지 않습니다. 이제 쿼리 이을 실행하는 것으로 확인되었습니다. 그래서, 실제로 그렇게해야합니다. 그러나 쿼리를 인쇄하면 잘못 인쇄되는 것은 매우 귀찮은 일입니다. 나는 이런 식으로 뭔가를 ... 한 경우에 특히
당신이 볼 수 있듯이, 완전히 잘못된 SQL 코드를 생성뿐만 아니라 SQL 주입 공격의 씨앗을 가지고뿐만 아니라,>>> qs = Identifier.objects.filter(Q(key=") AND") | Q(key="\"x\"); DROP TABLE
`app_identifier`"))
>>> print qs.query
SELECT `app_identifier`.`id`, `app_identifier`.`user_id`,
`app_identifier`.`key`, `app_identifier`.`value` FROM
`app_identifier` WHERE (`app_identifier`.`key` =) AND OR
`app_identifier`.`key` = "x"); DROP TABLE `app_identifier`)
>>>
. 이제 분명히 이것은 실제로 작동하지 않을 것입니다. (1. 문법은 의도적으로 장고의 행동이 이상하다는 것을 보여주기 위해 잘못되었습니다.) 2. 장고는 실제로 이런 쿼리를 실행하지 않을 것입니다. 실제로 따옴표와 슬래시를 넣고 그 안에있는 모든 것들을 가정합니다.)
그러나 이것은 실제로 디버깅을 혼란스럽게 만들고, 장고 설치로 인해 뭔가 잘못되었는지 궁금합니다.
이 문제가 발생합니까? 그렇다면 파이썬과 장고의 버전은 무엇입니까?
의견이 있으십니까?
'qs.query.as_sql()'을 시도 했습니까? – Amarghosh
제가 이해하는 한, QuerySet.query.as_sql()은 1.2.1 이전의 장고 버전에서 더 이상 작동하지 않습니다. 나는 1.2.1을 사용하여 장고 세계로 들어 왔으므로 상세한 내용을 알지 못한다. 그러나이 주제에 대한 연구에서 내가 발견 한 것이었다. "print qs.query.as_sql()" "AttributeError : 'Query'객체에 설치시 'as_sql'속성이 없습니다. – MikeC8