복붙노트

[SQL] 파이썬에서 SQL 주입에 대해 보호

SQL

파이썬에서 SQL 주입에 대해 보호

파이썬에서 일부 코드가 그 SQLite는 DB에 세트 숯불 (80) 값.

문자열은 텍스트 입력 필드를 통해 사용자로부터 직접 수득하고 JSON 구조에서 POST 방식으로 서버에 다시 전송된다.

서버 측에서 저는 현재 SQL UPDATE 조작을 호출하는 방법에 문자열을 전달합니다.

그것은 작동하지만, 나는 그것이 전혀 안전하지 않습니다 알고 있어요.

나는 어떤 보호 서버 측에 넣어 될 수 있도록 클라이언트 측이 안전하지 않은 어쨌든이 것을 기대합니다. 나는 SQL 주입 전년도 업데이트 작업을 확보하기 위해 무엇을 할 수 있는가?

"인용"텍스트는 SQL 파서를 혼동 할 수없는 것이다 그래야 함수는 내가 무엇을 찾고있다. 나는 그런 기능의 존재를 기대하지만, 그것을 찾을 수 없습니다.

편집하다: 여기에 문자 필드 이름 레이블을 설정 내 현재 코드는 다음과 같습니다

def setLabel( self, userId, refId, label ):
    self._db.cursor().execute( """
        UPDATE items SET label = ? WHERE userId IS ? AND refId IS ?""", ( label, userId, refId) )
    self._db.commit()

해결법

  1. ==============================

    1.문서에서 :

    문서에서 :

    con.execute("insert into person(firstname) values (?)", ("Joe",))
    

    이 이스케이프 "조", 그래서 당신이 원하는

    con.execute("insert into person(firstname) values (?)", (firstname_from_client,))
    
  2. ==============================

    2.DB를-API의 .Execute를 ()는 당신을 위해 탈출 처리됩니다 매개 변수 대체를 지원, 그것 문서의 상단에 언급; http://docs.python.org/library/sqlite3.html 절대 위는이 작업을 수행 - 불안합니다.

    DB를-API의 .Execute를 ()는 당신을 위해 탈출 처리됩니다 매개 변수 대체를 지원, 그것 문서의 상단에 언급; http://docs.python.org/library/sqlite3.html 절대 위는이 작업을 수행 - 불안합니다.

  3. ==============================

    3.안돼 ... 사용 바인딩 변수! 즉 그들이 거기에가있어거야. 이것 좀 봐

    안돼 ... 사용 바인딩 변수! 즉 그들이 거기에가있어거야. 이것 좀 봐

    이 기술의 또 다른 이름은 매개 변수가있는 SQL (나는 생각한다 "바인드 변수"특히 오라클과 함께 사용되는 이름이 될 수 있음)입니다.

  4. from https://stackoverflow.com/questions/10950362/protecting-against-sql-injection-in-python by cc-by-sa and MIT license