2011-03-02 4 views
0

나는 PHP에 익숙하다. 파이썬은 처음이다. PHP에서는 addslashes() 및 stripslashes() 메서드를 사용합니다. 이 대신에 SQL 충돌을 피하기 위해 python에는 어떤 해결책이 있습니다.addslashes 대신 웹 파이썬

db.execute('SELECT * FROM users WHERE username=:user;', {'user': 'john'}) 

귀하의 SQL 클라이언트 라이브러리가 인용하고 당신을 위해 탈출을 처리합니다 :

+1

먼저 PHP에서 그렇게해서는 안됩니다. 둘째, Python에서 ** 이와 같은 것을 ** 직접적으로 ** 할 수는 없습니다. 파이썬에서 그렇게해서는 안됩니다. 질문을 확대하여 수행 할 것으로 생각되는 SQL을 표시 할 수 있습니다. 또한 Python DB-API를 읽을 수도 있습니다. –

+0

SQL 인젝션을 방지하기 위해'addslashes()'를 사용해서는 안됩니다. - PDO 준비 문이나'pg_exec_params()'와 같은 것을 사용할 수 없다면 - DB 고유의 메소드. MySQL의 경우'mysql_real_escape_string()'. – ThiefMaster

답변

4

이 솔루션은이 같은 것을 할 것 매개 변수화 된 문입니다. 정확한 세부 정보는 사용하는 라이브러리에 따라 다릅니다 (예 : RDBMS가 PostgreSQL 인 경우 라이브러리는 psycopg2 일 수 있음).

+0

개인적으로 나는'% s' 플레이스 홀더와 인수에 대한 dict 대신 튜플을 선호합니다. 특히 적은 수의 인수를 사용하는 쿼리의 경우 작성하기가 훨씬 적고 읽기 쉽지 않습니다. – ThiefMaster

+1

@ThiefMaster - ['%'] (http://docs.python.org/release/3.0.1/whatsnew/2.6.html#pep-3101) 연산자는 사용되지 않습니다. 정방향 호환성을 위해 [' ".format()'] (http://docs.python.org/library/string.html#format-examples)를 사용하십시오. – Nate

+0

@Nate : 운영자로 사용되지 않습니다. 그러면 SQL 주입이 가능해집니다. 이것은 다음과 같이 사용됩니다 :'db.execute ('SELECT ... WHERE col = % s', (something,))' – ThiefMaster