2010-01-14 7 views
23

Estoy configurando un sitio usando PHP y MySQL que es esencialmente solo una página web de una base de datos existente. Es comprensible que mi cliente esté muy interesado en evitar que alguien pueda hacer una copia de los datos en la base de datos pero al mismo tiempo quiere que todo esté disponible públicamente e incluso un enlace "ver todo" para mostrar cada registro en la base de datos.Técnicas principales para evitar el "robo de datos" de una base de datos de un sitio web

Aunque he puesto todo en su lugar para evitar ataques como ataques de inyección SQL, no hay nada que impida que cualquiera vea todos los registros como html y ejecute algún tipo de script para analizar estos datos en otra base de datos. Incluso si tuviera que eliminar el enlace "ver todo", alguien todavía podría, en teoría, usar un proceso automático para revisar cada registro uno por uno y compilarlos en una nueva base de datos, esencialmente pellizcando toda la información.

¿Alguien tiene alguna buena táctica para prevenir o incluso detener esto que podrían compartir?

+11

@Addsy Sin embargo, es una pregunta tonta. "Quiero que toda la base de datos sea públicamente visible, pero no quiero que la gente pueda leerla". – meagar

+1

puede generar una imagen/pdf a partir del contenido – Marcel

Respuesta

29

Si los datos se publican, estarán visibles y accesibles para todos en Internet. Esto incluye a las personas que quiere ver y las personas que no.

No puede tener las dos cosas. Puede hacerlo para que los datos solo puedan verse con una cuenta, y las personas crearán cuentas para compartir los datos. Puede hacer que los datos solo puedan verse desde las direcciones IP aprobadas, y las personas seguirán los pasos para adquirir la aprobación antes de sorberla.

Sí, puede hacer que sea difícil de obtener, pero si desea que sea conveniente para los usuarios típicos, también es conveniente para los malintencionados.

+6

Sí, este fue mi punto de vista también. Pero, aparentemente, el cliente ha tenido otra mirada de "experto" en el sitio, lo que ha hecho que mi cliente se asuste un poco al respecto.Me parece que cualquier intento de hacerlo más difícil sería trivial de superar (por ejemplo, requiere iniciar sesión, enterrar datos en etiquetas html excesivas o extrañas) o tener un impacto severo de accesibilidad/seo (por ejemplo, maquinar datos en el lado php y 'desbloquear' de nuevo con javascript, comprobar si el visitante está utilizando un navegador web 'adecuado', etc.) Gracias a todos por su ayuda de todos modos. – Addsy

2

No sé por qué disuadirías esto. El cliente está ofreciendo los datos.

Presumiblemente crean valor de una manera única que no se refleja trivialmente en los datos.

De todos modos.

Puede verificar el navegador, la resolución de pantalla y la dirección IP para ver si es probable que sea algún tipo de raspador automatizado.

La mayoría de las cosas como cURL y wget, a menos que estén cuidadosamente configuradas, obviamente no son navegadores.

45

Si bien no hay nada que impida a una persona determinada por el raspado de contenido disponible públicamente, puede hacer algunas cosas básicas para mitigar las preocupaciones del cliente:

  • Tasa límite por cuenta de usuario, dirección IP, agente de usuario, etc ... - esto significa que restringe la cantidad de datos que un grupo de usuarios en particular puede descargar en un cierto período de tiempo. Si detecta una gran cantidad de datos que se transfieren, cierra la cuenta o la dirección IP.

  • necesitan Javascript - para garantizar que el cliente tiene alguna semejanza de un navegador interactivo, en lugar de una araña barebones ...

  • RIA - Haga sus datos disponibles a través de una interfaz de aplicaciones ricas de Internet. Las cuadrículas basadas en JavaScript incluyen ExtJs, YUI, Dojo, etc. Los entornos más ricos incluyen Flash y Silverlight como 1kevgriff mentions.

  • Codifica datos como imágenes. Esto es bastante intrusivo para los usuarios habituales, pero podría codificar algunas de sus tablas de datos o valores como imágenes en lugar de texto, lo que sería una derrota para la mayoría de los analizadores de texto, pero no es infalible, por supuesto.

  • robots.txt - para denegar arañas web obvias, conocidos agentes de usuario de robots.

    User-agent: *

    Disallow:/

  • Use metatags robot. Esto dejaría de conformar arañas.Esto evitará que Google de que la indexación por ejemplo:

    < meta name = contenido de "robots" = "noindex, siga, noarchive" >

Hay diferentes niveles de disuasión y la primera opción es, probablemente, el menos intrusivo.

+1

Solo para tener en cuenta: esta respuesta puede estar obsoleta; fue válido en 2010, pero hoy en día casi todos los raspadores podrían usar un "navegador sin cabeza" (por ejemplo, el kit PhantomJS) capaz de ejecutar javascript y obtener resultados de una página que está representada por una rica interfaz de JavaScript. Además, si desea hacer algún tipo de limitación de velocidad, necesita encontrar una forma de bloquear todos los servicios Tor y de proxy público que permiten que cualquiera que quiera que sus datos difundan el raspado entre muchas direcciones IP exclusivas. – Peteris

5

No hay nada que puedas hacer. Puede tratar de buscar un proceso automatizado que atraviese su sitio, pero al final ganarán.

Regla de oro: si quiere quedarse con algo, no lo mantenga en Internet.

-3

Mi sugerencia sería que esto es ilegal de todos modos por lo que al menos usted tiene un recurso legal si alguien raspa el sitio web. Entonces, quizás lo mejor sería incluir un enlace al sitio original y dejar que la gente se deshaga. Mientras más raspen, más enlaces aparecerán en Internet, incrementando cada vez más tu pagerank.

Las personas que rascan generalmente no se oponen a incluir un enlace al sitio original, ya que crea una especie de relación con el autor original.

Así que mi consejo es preguntarle a su jefe si esto realmente podría ser lo mejor para la salud del sitio web.

+3

¿Por qué crees que el raspado de pantalla es ilegal? – DaveE

1

No hay una solución fácil para esto. Si los datos están disponibles públicamente, se pueden raspar. Lo único que puede hacer es dificultar la vida del raspador al hacer que cada entrada sea ligeramente única al agregar/cambiar el HTML sin afectar el diseño. Esto posiblemente haría que a alguien le cueste más cosechar los datos usando expresiones regulares, pero aún no es una solución real y yo diría que si alguien está lo suficientemente determinado encontraría la manera de lidiar con eso.

Sugiero decirle a su cliente que esta es una tarea inalcanzable y continuar con las partes importantes de su trabajo.

7

Pruebe usar Flash o Silverlight para su interfaz.

Si bien esto no puede detener a alguien si está realmente determinado, sería más difícil. Si está cargando sus datos a través de servicios, siempre puede usar una conexión segura para evitar que los intermediarios se rasquen.

+6

Las aplicaciones Flash son incluso más fáciles de "raspar" (es decir, interceptar y reinterpretar datos) que los sitios HTML para alguien que sabe cómo, si envían información a la página como objetos AMF. – JAL

11

Hay algunas maneras en que puede hacerlo, aunque ninguna es ideal.

  1. Presente los datos como una imagen en lugar de HTML. Esto requiere un procesamiento adicional en el lado del servidor, pero no sería difícil con las librerías de gráficos en PHP. De forma alternativa, puede hacer esto solo para solicitudes de un cierto tamaño (es decir, todas).

  2. Cargue un shell de página, luego recupere los datos mediante una llamada AJAX e insértelo en el DOM. Utilice las sesiones para establecer un hash que debe transmitirse con la llamada AJAX como verificación. El hash solo sería válido durante un cierto período de tiempo (es decir, 10 segundos). Esto realmente solo agrega un paso extra que alguien tendría que pasar para obtener los datos, pero evitaría el simple raspado de la página.

2

El uso de algo como Adobe Flex - una aplicación Flash de interfaz - arreglaría esto.

Aparte de eso, si desea que los usuarios puedan acceder fácilmente, es fácil para los usuarios copiar.

0

¿Qué tal crear algo parecido a la protección troll del tablero de anuncios ... Si se detecta un raspado (tal vez una cierta cantidad de accesos por minuto desde una IP, o un rastreo dirigido que parece un rastreo de mapa del sitio), puede luego comience a presentar datos basura, como cambiar un par de dígitos del número de teléfono o agregar nombres tontos para nombrar los campos.

¡Desactive esto para las direcciones IP de google!

3

Quite sus manos del teclado y pregúntele a su cliente el motivo por qué quiere que los datos sean visibles pero no puedan ser raspados?

Está pidiendo dos cosas incongruentes y tal vez tener una discusión sobre su razonamiento arrojará algo de fruta.

Puede ser que realmente no quiera que sea de acceso público y necesita agregar autenticación/autorización. O puede decidir que hay valor para abrir una API. Pero no lo sabrás hasta que lo preguntes.

4

fuerza de un reCAPTCHA cada 10 cargas de página para cada IP única

0

uso del hecho de que los raspadores tienden a cargar muchas páginas en rápida sucesión a detectar comportamientos de raspado. Muestre un CAPTCHA por cada n carga de página durante x segundos, y/o incluya un retraso de crecimiento exponencial para cada carga de página que se vuelve bastante larga cuando digamos que se están cargando decenas de páginas por minuto.

De esta manera, los usuarios normales probablemente nunca verán su CAPTCHA, pero los rascadores alcanzarán rápidamente el límite que los fuerza a resolver CAPTCHA.

Cuestiones relacionadas