2008-09-11 19 views
9

Voy a implementar una configuración PHP/mySQL para almacenar información de la tarjeta de crédito.¿Cómo puedo mantener segura una base de datos mySQL?

Parece que AES_ENCRYPT/AES_DECRYPT es el camino a seguir,

pero todavía estoy confundido en un punto:

¿Cómo mantengo la clave de cifrado seguro?

El cableado en mis scripts PHP (que vivirán en el mismo servidor que el db) parece un gran agujero de seguridad.

¿Cuál es la solución de "mejores prácticas" aquí?

Respuesta

15

Debería pensar detenidamente si REALMENTE necesita mantener el CC#. Si no tienes una buena razón, ¡NO! Cada dos semanas escuchas que una empresa se ve comprometida y le roban CC#. Todas estas empresas cometieron un error fatal: guardaban demasiada información. Mantenga el CC# hasta que se complete la transacción. Después de eso, elimínelo.

En lo que respecta a la seguridad del servidor, lo mejor es proteger el hardware y usar el socket del sistema interno en MySQL, y asegurarse de bloquear cualquier acceso de red al servidor MySQL. Asegúrate de estar usando los permisos de tu sistema y los permisos de MySQL para permitir el menor acceso posible. Para algunas secuencias de comandos, puede considerar la autenticación de solo escritura. Realmente no hay un método de encriptación que sea infalible (ya que siempre será necesario descifrarlo y, por lo tanto, debe almacenar la clave). Esto no quiere decir que no deba: puede almacenar su clave en una ubicación y, si detecta un compromiso del sistema, puede destruir el archivo y dejar inutilizados los datos.

+0

Bingo: no guarde los datos de la tarjeta de crédito si es posible. Procese y descarte, y permita que un servicio como PayPal se ocupe de las transacciones recurrentes. – ceejayoz

+2

Para los casos en que ocurre una devolución de cargo (es decir, el propietario de CC alega que la transacción fue incorrecta), querrá conservar los últimos cuatro dígitos del número de CC. – BlaM

+3

Quizás también los primeros 6 dígitos por razones estadísticas. Los primeros 6 identifican al banco emisor, por lo que puede ver si hay muchas transacciones fraudulentas desde un banco, por lo que puede comenzar a bloquear varias tarjetas de crédito en casos malos. – BlaM

0

Estoy de acuerdo, pero no lo haga si no lo necesita también. Pero si realmente lo tiene también, asegúrese de que el archivo que lo tiene no esté accesible en la web. Puedes escribir un binario que devuelva la clave. De esta forma no se almacena en texto claro. Pero si su servidor es un compromiso, todavía es fácil de obtener.

0

la seguridad que necesita depende de su aplicación. por ejemplo, si el único momento en que se usará el cC# es cuando el usuario está conectado (escenario del tipo de tienda en línea delgada), entonces puede encriptar el cC# con el hash de la contraseña de texto sin formato del usuario, una sal de usuario, y una sal de cC# dedicada. no almacene este valor permanentemente.

ya que no está almacenando este valor, la única vez que puede obtener este valor es cuando el usuario ingresa su contraseña para iniciar sesión. Solo asegúrese de que tenga una buena caducidad de sesión y políticas de recolección de basura en su lugar.

si esta situación no se aplica a su caso, describa su situación con más detalle para que podamos proporcionarle una respuesta más adecuada.

3

MySQL, existen seis sencillos pasos que puede seguir para proteger sus datos confidenciales.

Paso 1: Retire comodines en las tablas de permisos

Paso 2: Requieren el uso de contraseñas seguras

Nota: Utilice la opción MySQL “--secure-auth” para evitar el uso de más edad, formatos de contraseñas MySQL menos seguros.

Paso 3: Compruebe los permisos de los archivos de configuración

Paso 4: transmisiones cliente-servidor Cifrar

Paso 5: desactivar el acceso remoto

Paso 6: controlar activamente el registro de acceso MySQL

Herramientas de seguridad

Cuestiones relacionadas