es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tratando de crear un script que escanea secretos en código Python.

Como parte de nuestro CI / CD, queremos agregar algunas verificaciones para ejecutar código en archivos de Python y verificar si hay secretos en el código (como API, contraseñas, etc.).
Solo vi programas que lo hacen y quiero crear un script de Python que lo haga.

¿Alguien tiene alguna sugerencia o ejemplo para esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en Python especializado en contraseñas y claves, recomendaría utilizar una biblioteca de terceros como boto3, getpass y os para buscar y eliminar cualquier secreto codificado en duro en su código.

    Aquí hay un ejemplo de cómo podría implementar esto en su proceso de CI/CD utilizando Python:

    1. Crear un script de Python que busque de manera recursiva a través del directorio de su proyecto por archivos .py.
    2. Para cada archivo, utilice una expresión regular para buscar cualquier secreto, como claves de API o contraseñas. Esto se puede lograr utilizando la biblioteca ‘re’.

    3. Si se encuentra un secreto, solicite al usuario que ingrese el secreto a través de la línea de comandos en su lugar. Puede utilizar la biblioteca getpass para manejar esto de manera segura.

    4. Una vez que todos los secretos han sido reemplazados por la entrada del usuario, confirme los archivos modificados de vuelta en su repositorio de código.

    Aquí hay un código de ejemplo para comenzar:

    import boto3
    import os
    import re
    import getpass
    
    # Defina patrones de búsqueda para varios tipos de secretos
    SECRET_PATTERNS = [
        'api_key',
        'password',
        'secret'
    ]
    
    def main():
        # Busque de manera recursiva todos los archivos .py en el directorio actual
        for root, dirs, files in os.walk('.'):
            for f in files:
                if f.endswith('.py'):
                    filename = os.path.join(os.path.abspath(root), f)
                    with open(filename, 'r') as f:
                        contents = f.read()
    
                    # Verifique los secretos en el contenido del archivo
                    for pattern in SECRET_PATTERNS:
                        secret_regex = re.compile(f'{pattern}="(.+)"')
                        matches = secret_regex.findall(contents)
                        if matches:
                            for match in matches:
                                # Solicite al usuario que ingrese el secreto, reemplazando el valor codificado en duro
                                new_value = getpass.getpass(f'Ingrese un nuevo valor para {pattern}: ')
                                contents = contents.replace(match, new_value)
    
                    # Escriba los contenidos modificados del archivo de vuelta en el disco
                    with open(filename, 'w') as f:
                        f.write(contents)
    
    if __name__ == '__main__':
        main()
    

    Tenga en cuenta que este es solo un ejemplo simple y puede que necesite modificarse para adaptarse a sus requisitos específicos. Por ejemplo, es posible que desee agregar soporte para tipos adicionales de secretos o integrar este script con su proceso de CI/CD.

Comments are closed.