복붙노트

[PYTHON] 파이썬 스크립트에서 암호 숨김 (안전하지 않은 난독 화만)

PYTHON

파이썬 스크립트에서 암호 숨김 (안전하지 않은 난독 화만)

ODBC 연결을 만드는 python 스크립트가 있습니다. ODBC 연결은 연결 문자열과 함께 생성됩니다. 이 연결 문자열에서이 연결에 대한 사용자 이름과 암호를 포함시켜야합니다.

파일에서이 암호를 쉽게 알아볼 수있는 방법이 있습니까? (파일을 편집 할 때 아무도 암호를 읽을 수 없습니까?)

해결법

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

    1.Base64 인코딩은 표준 라이브러리에 있으며 어깨 너머를 멈추게 할 것입니다.

    Base64 인코딩은 표준 라이브러리에 있으며 어깨 너머를 멈추게 할 것입니다.

    >>> import base64
    >>> print base64.b64encode("password")
    cGFzc3dvcmQ=
    >>> print base64.b64decode("cGFzc3dvcmQ=")
    password
    
  2. ==============================

    2.Douglas F Shearer 's는 원격 로그인을 위해 암호를 지정해야 할 때 일반적으로 유닉스에서 승인 된 솔루션입니다. --password-from-file 옵션을 추가하여 경로를 지정하고 파일에서 일반 텍스트를 읽습니다. 그런 다음 파일은 운영 체제가 보호하는 사용자 자신의 영역에있을 수 있습니다. 또한 다른 사용자가 자신의 파일을 자동으로 선택할 수 있습니다.

    Douglas F Shearer 's는 원격 로그인을 위해 암호를 지정해야 할 때 일반적으로 유닉스에서 승인 된 솔루션입니다. --password-from-file 옵션을 추가하여 경로를 지정하고 파일에서 일반 텍스트를 읽습니다. 그런 다음 파일은 운영 체제가 보호하는 사용자 자신의 영역에있을 수 있습니다. 또한 다른 사용자가 자신의 파일을 자동으로 선택할 수 있습니다.

    스크립트 사용자가 알 수없는 암호의 경우 - 사용자는 허가 된 권한으로 스크립트를 실행하고 해당 root / admin 사용자가 암호 파일을 소유 할 수 있습니다.

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

    3.다음은 간단한 방법입니다.

    다음은 간단한 방법입니다.

    이것은 base64 디코딩보다 조금 더 안전해야합니다 - 비록 py_to_pyc 디 컴파일러에 취약합니다.

  4. ==============================

    4.Unix 시스템에서 작업하는 경우 표준 Python 라이브러리의 netrc 모듈을 활용하십시오. 별도의 텍스트 파일 (.netrc)에서 암호를 읽습니다.이 파일은 여기에 설명 된 형식을 갖습니다.

    Unix 시스템에서 작업하는 경우 표준 Python 라이브러리의 netrc 모듈을 활용하십시오. 별도의 텍스트 파일 (.netrc)에서 암호를 읽습니다.이 파일은 여기에 설명 된 형식을 갖습니다.

    다음은 작은 사용 예입니다.

    import netrc
    
    # Define which host in the .netrc file to use
    HOST = 'mailcluster.loopia.se'
    
    # Read from the .netrc file in your home directory
    secrets = netrc.netrc()
    username, account, password = secrets.authenticators( HOST )
    
    print username, password
    
  5. ==============================

    5.가장 좋은 해결책은 사용자가 런타임에 사용자 이름과 암호를 제공 할 수 없다고 가정 할 때 주 코드로 가져온 사용자 이름과 암호에 대한 변수 초기화 만 포함하는 별도의 소스 파일 일 것입니다. 이 파일은 자격 증명이 변경 될 때만 편집하면됩니다. 그렇지 않은 경우, 평범한 추억을 가진 어깨 너머에 대해서만 걱정한다면 Base 64 인코딩이 가장 쉬운 해결책 일 것입니다. ROT13은 수동으로 해독하기가 너무 쉽고 대소 문자를 구분하지 않으며 암호화 된 상태에서 너무 많은 의미를 유지합니다. 암호와 사용자 ID를 파이썬 스크립트 외부로 인코딩하십시오. 런타임에 사용할 수 있도록 스크립트 디코드를 했습니까?

    가장 좋은 해결책은 사용자가 런타임에 사용자 이름과 암호를 제공 할 수 없다고 가정 할 때 주 코드로 가져온 사용자 이름과 암호에 대한 변수 초기화 만 포함하는 별도의 소스 파일 일 것입니다. 이 파일은 자격 증명이 변경 될 때만 편집하면됩니다. 그렇지 않은 경우, 평범한 추억을 가진 어깨 너머에 대해서만 걱정한다면 Base 64 인코딩이 가장 쉬운 해결책 일 것입니다. ROT13은 수동으로 해독하기가 너무 쉽고 대소 문자를 구분하지 않으며 암호화 된 상태에서 너무 많은 의미를 유지합니다. 암호와 사용자 ID를 파이썬 스크립트 외부로 인코딩하십시오. 런타임에 사용할 수 있도록 스크립트 디코드를 했습니까?

    자동 작업을위한 스크립트 자격 증명을주는 것은 항상 위험한 제안입니다. 스크립트에는 자체 자격 증명이 있어야하며 사용하는 계정에는 필요한 것 이외의 액세스 권한이 없어야합니다. 최소한 암호는 길고 무작위이어야합니다.

  6. ==============================

    6.스크립트 외부의 파일에서 사용자 이름과 암호를 가져 오는 방법은 어떻습니까? 그런 식으로 누군가가 스크립트를 가지고 있어도 자동으로 암호를 얻지 못합니다.

    스크립트 외부의 파일에서 사용자 이름과 암호를 가져 오는 방법은 어떻습니까? 그런 식으로 누군가가 스크립트를 가지고 있어도 자동으로 암호를 얻지 못합니다.

  7. ==============================

    7.base64는 여러분의 단순한 요구를 충족시키는 방법입니다. 아무 것도 가져올 필요가 없습니다.

    base64는 여러분의 단순한 요구를 충족시키는 방법입니다. 아무 것도 가져올 필요가 없습니다.

    >>> 'your string'.encode('base64')
    'eW91ciBzdHJpbmc=\n'
    >>> _.decode('base64')
    'your string'
    
  8. ==============================

    8.이것은 꽤 일반적인 문제입니다. 일반적으로 할 수있는 최선의 방법은

    이것은 꽤 일반적인 문제입니다. 일반적으로 할 수있는 최선의 방법은

    ) 인코딩 / 디코딩 (그냥 rot13되지 않습니다) 어떤 종류의 ceasar 암호 함수를 만들 또는 B) 선호하는 방법은 프로그램의 범위 내에서 암호 키를 사용하여 암호를 인 코드 / 디코드하는 것입니다. 파일 보호를 사용하여 키 액세스를 보호 할 수 있습니다.   해당 라인을 따라 앱이 서비스 / 데몬 (웹 서버와 같은)으로 실행되는 경우 서비스 시작의 일부로 비밀번호를 입력하여 비밀번호로 보호 된 키 저장소에 키를 넣을 수 있습니다. 앱을 다시 시작하려면 관리자가 필요하지만 구성 비밀번호를 정말 잘 이해할 수 있습니다.

  9. ==============================

    9.운영 체제는 아마도 데이터를 안전하게 암호화하는 기능을 제공합니다. 예를 들어, Windows에는 DPAPI (데이터 보호 API)가 있습니다. 처음 실행했을 때 사용자에게 자격 증명을 묻지 않고 후속 실행을 위해 암호화 된 다람쥐를 보지 않으시겠습니까?

    운영 체제는 아마도 데이터를 안전하게 암호화하는 기능을 제공합니다. 예를 들어, Windows에는 DPAPI (데이터 보호 API)가 있습니다. 처음 실행했을 때 사용자에게 자격 증명을 묻지 않고 후속 실행을 위해 암호화 된 다람쥐를 보지 않으시겠습니까?

  10. ==============================

    10.인증 / 암호 / 사용자 이름을 암호화 된 세부 정보로 변환하는 대신 자체 개발 방식을 사용합니다. FTPLIB는 그 예일뿐입니다. "pass.csv"는 csv 파일 이름입니다.

    인증 / 암호 / 사용자 이름을 암호화 된 세부 정보로 변환하는 대신 자체 개발 방식을 사용합니다. FTPLIB는 그 예일뿐입니다. "pass.csv"는 csv 파일 이름입니다.

    아래처럼 암호를 CSV로 저장하십시오 :

    사용자 이름

    사용자 암호

    (열 표제 없음)

    CSV를 읽고 목록에 저장하십시오.

    List 요소를 인증 세부 정보로 사용.

    전체 코드.

    import os
    import ftplib
    import csv 
    cred_detail = []
    os.chdir("Folder where the csv file is stored")
    for row in csv.reader(open("pass.csv","rb")):       
            cred_detail.append(row)
    ftp = ftplib.FTP('server_name',cred_detail[0][0],cred_detail[1][0])
    
  11. ==============================

    11.구성 정보를 암호화 된 구성 파일에 저장하십시오. 키를 사용하여 코드에서이 정보를 쿼리하십시오. 이 키는 환경별로 별도의 파일에 저장하고 코드와 함께 저장하지 마십시오.

    구성 정보를 암호화 된 구성 파일에 저장하십시오. 키를 사용하여 코드에서이 정보를 쿼리하십시오. 이 키는 환경별로 별도의 파일에 저장하고 코드와 함께 저장하지 마십시오.

  12. ==============================

    12.Windows에서 실행중인 경우 win32crypt 라이브러리 사용을 고려할 수 있습니다. 스크립트를 실행하는 사용자가 보호 된 데이터 (키, 암호)를 저장하고 검색 할 수 있으므로 암호가 일반 텍스트 또는 코드에서 난독 화 된 형식으로 저장되지 않습니다. 나는 다른 플랫폼에 대해 동일한 구현이 있는지 확실하지 않으므로 win32crypt의 엄격한 사용으로 코드를 이식 할 수 없습니다.

    Windows에서 실행중인 경우 win32crypt 라이브러리 사용을 고려할 수 있습니다. 스크립트를 실행하는 사용자가 보호 된 데이터 (키, 암호)를 저장하고 검색 할 수 있으므로 암호가 일반 텍스트 또는 코드에서 난독 화 된 형식으로 저장되지 않습니다. 나는 다른 플랫폼에 대해 동일한 구현이 있는지 확실하지 않으므로 win32crypt의 엄격한 사용으로 코드를 이식 할 수 없습니다.

    나는 모듈이 여기에서 얻을 수 있다고 믿는다 : http://timgolden.me.uk/pywin32-docs/win32crypt.html

  13. ==============================

    13.Python으로 작성된 여러 ROT13 유틸리티가 'Net - google for them'에 있습니다. ROT13은 문자열을 오프라인으로 인코딩하고, 소스로 복사하고, 전송 시점에서 디코딩합니다.하지만 이것은 실제로 약한 보호입니다 ...

    Python으로 작성된 여러 ROT13 유틸리티가 'Net - google for them'에 있습니다. ROT13은 문자열을 오프라인으로 인코딩하고, 소스로 복사하고, 전송 시점에서 디코딩합니다.하지만 이것은 실제로 약한 보호입니다 ...

  14. ==============================

    14.구덩이를 아십니까?

    구덩이를 아십니까?

    https://pypi.python.org/pypi/pit (py2 전용 (버전 0.3))

    https://github.com/yoshiori/pit (py3 (현재 버전 0.4)에서 작동 함)

    test.py

    from pit import Pit
    
    config = Pit.get('section-name', {'require': {
        'username': 'DEFAULT STRING',
        'password': 'DEFAULT STRING',
        }})
    print(config)
    

    운영:

    $ python test.py
    {'password': 'my-password', 'username': 'my-name'}
    

    ~ / .pit / default.yml :

    section-name:
      password: my-password
      username: my-name
    
  15. from https://stackoverflow.com/questions/157938/hiding-a-password-in-a-python-script-insecure-obfuscation-only by cc-by-sa and MIT license