Foros del Web » Programando para Internet » PHP »

Http_user_agent

Estas en el tema de Http_user_agent en el foro de PHP en Foros del Web. Hola, Estoy haciendo un parser para saber que navegador utilza el usuario de mi web, me va batante bien, pero hay una cadena devuelta por ...
  #1 (permalink)  
Antiguo 25/07/2011, 14:37
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 14 años, 1 mes
Puntos: 2
Http_user_agent

Hola,

Estoy haciendo un parser para saber que navegador utilza el usuario de mi web, me va batante bien, pero hay una cadena devuelta por HTTP_USER_AGENT que no tengo la menor idea que browser puede ser.

Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; es) AppleWebKit/533.19.4 (KHTML, like Gecko)

Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; es-es) AppleWebKit/533.21.1 (KHTML, like Gecko)

y

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7) AppleWebKit/534.48.3 (KHTML, like Gecko)

Como pueden ver son todos MAC's pero no aparece el browser en ningun lado (o yo no lo veo). Tengo varios usuarios que entraron desde mac, utilizando safari, chrome o firefox, pero en estas 3 cadenas no veo nada.

Si alguno podria decirme a que browser hace referencia esta cadena me ayudaria.
  #2 (permalink)  
Antiguo 25/07/2011, 14:47
 
Fecha de Ingreso: abril-2008
Mensajes: 435
Antigüedad: 16 años, 6 meses
Puntos: 10
Respuesta: Http_user_agent

Pues..... asi tal cual no esta en ningun lado, quiero decir puede ser cualquier browser.

recuerda que el user agent puede ser modificado a gusto por el usuario, por lo que te pueden introducir cualqueir string

saludos
  #3 (permalink)  
Antiguo 25/07/2011, 16:21
Avatar de perryjr  
Fecha de Ingreso: julio-2010
Ubicación: Granada, Spain, Spain
Mensajes: 190
Antigüedad: 14 años, 3 meses
Puntos: 27
Respuesta: Http_user_agent

Son Safari (con una seguridad del 95% =) )

Mozilla envía otro tipo de cadenas, Internet Explorer no es, Chrome también envía el nombre y Los Mac tienen de serie el Safari (por lo cual es muy probable que lo esten usando)

Recalco lo que ha dicho Adell, ten cuidado porque un usuario puedes sobreescribirlo, o incluso eliminarla! He conocido en persona una web que hackearon gracias a esta estupidez: hacer una tabla con todos los user-agent que habían visitado el sitio (no te olvides de usar htmlentities para evitar que esa tabla tenga datos que permitan ataques, en este caso al usuario: el administrador)
__________________
I (L) Google
  #4 (permalink)  
Antiguo 25/07/2011, 20:48
 
Fecha de Ingreso: abril-2008
Mensajes: 435
Antigüedad: 16 años, 6 meses
Puntos: 10
Respuesta: Http_user_agent

y para agregar un poco mas de data

http://www.useragentstring.com/pages/Browserlist/

aqui tienes listado de los user-agent de browsers

y como dijo perryjr ten cuidado de no guardar directamente lo que manda el usuario sin filtrarlo para evitar todo tipo de XSS

saludos
  #5 (permalink)  
Antiguo 25/07/2011, 20:52
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Http_user_agent

Te dejo esta función sacada de la página oficial...

Código PHP:
Ver original
  1. <?php
  2. function getBrowser()
  3. {
  4.     $u_agent = $_SERVER['HTTP_USER_AGENT'];
  5.     $bname = 'Unknown';
  6.     $platform = 'Unknown';
  7.     $version= "";
  8.  
  9.     //First get the platform?
  10.     if (preg_match('/linux/i', $u_agent)) {
  11.         $platform = 'linux';
  12.     }
  13.     elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
  14.         $platform = 'mac';
  15.     }
  16.     elseif (preg_match('/windows|win32/i', $u_agent)) {
  17.         $platform = 'windows';
  18.     }
  19.    
  20.     // Next get the name of the useragent yes seperately and for good reason
  21.     if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent))
  22.     {
  23.         $bname = 'Internet Explorer';
  24.         $ub = "MSIE";
  25.     }
  26.     elseif(preg_match('/Firefox/i',$u_agent))
  27.     {
  28.         $bname = 'Mozilla Firefox';
  29.         $ub = "Firefox";
  30.     }
  31.     elseif(preg_match('/Chrome/i',$u_agent))
  32.     {
  33.         $bname = 'Google Chrome';
  34.         $ub = "Chrome";
  35.     }
  36.     elseif(preg_match('/Safari/i',$u_agent))
  37.     {
  38.         $bname = 'Apple Safari';
  39.         $ub = "Safari";
  40.     }
  41.     elseif(preg_match('/Opera/i',$u_agent))
  42.     {
  43.         $bname = 'Opera';
  44.         $ub = "Opera";
  45.     }
  46.     elseif(preg_match('/Netscape/i',$u_agent))
  47.     {
  48.         $bname = 'Netscape';
  49.         $ub = "Netscape";
  50.     }
  51.    
  52.     // finally get the correct version number
  53.     $known = array('Version', $ub, 'other');
  54.     $pattern = '#(?<browser>' . join('|', $known) .
  55.     ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
  56.     if (!preg_match_all($pattern, $u_agent, $matches)) {
  57.         // we have no matching number just continue
  58.     }
  59.    
  60.     // see how many we have
  61.     $i = count($matches['browser']);
  62.     if ($i != 1) {
  63.         //we will have two since we are not using 'other' argument yet
  64.         //see if version is before or after the name
  65.         if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
  66.             $version= $matches['version'][0];
  67.         }
  68.         else {
  69.             $version= $matches['version'][1];
  70.         }
  71.     }
  72.     else {
  73.         $version= $matches['version'][0];
  74.     }
  75.    
  76.     // check if we have a number
  77.     if ($version==null || $version=="") {$version="?";}
  78.    
  79.     return array(
  80.         'userAgent' => $u_agent,
  81.         'name'      => $bname,
  82.         'version'   => $version,
  83.         'platform'  => $platform,
  84.         'pattern'    => $pattern
  85.     );
  86. }
  87.  
  88. // now try it
  89. $ua=getBrowser();
  90. $yourbrowser= "Your browser: " . $ua['name'] . " " . $ua['version'] . " on " .$ua['platform'] . " reports: <br >" . $ua['userAgent'];
  91. print_r($yourbrowser);
  92. ?>
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #6 (permalink)  
Antiguo 26/07/2011, 01:02
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 6 meses
Puntos: 261
Respuesta: Http_user_agent

La verdad que no es fiable para obtener datos reales. Por ejemplo, para Firefox hay un plugin para cambiar a tu antojo el User Agent, y poder simular que es cualquier browser. Un ejemplo sencillo es cambiar el user agent como el de un iPhone, para ver versiones de webs para estos dispositivos, o como un robot, para ver partes ocultas de foros a personal no registrado.

En mi caso, utilizo el user agent solo para comprobar la consistencia de la session, ya que por lo comentado antes, no te ofrece un resultado 100% real.
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #7 (permalink)  
Antiguo 26/07/2011, 07:39
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Http_user_agent

Gracias por las respuestas.

andresdzphp, esa es la funcion que estoy usando (la mejore un poco, pero la base es esa). De todas formas no detecta el navegador en el caso que puse.
  #8 (permalink)  
Antiguo 26/07/2011, 11:29
Avatar de perryjr  
Fecha de Ingreso: julio-2010
Ubicación: Granada, Spain, Spain
Mensajes: 190
Antigüedad: 14 años, 3 meses
Puntos: 27
Respuesta: Http_user_agent

De todas maneras, si lo haces por algo de Javascript, es mejor que detectes características, no navegadores. Es decir, que mires si tienen canvas o no, que mires si tienen HTML5 history o no, y así. Porque la cantidad de navegadores es enorme (unos 300 y pico eran, algunos no oirás ni tu ni yo hablar de ellos en la vida =) )

http://modernizr.com/

Si lo haces por distintas versiones de tu página, es mejor que detected "Webkit" (Safari/Chrome/la mayoría de esos 300 que mencione antes), Gecko (Firefox) y Internet Explorer. Son los tres grandes grupos. El primer grupo, dados que todos usan Webkit, se verán extremadamente parecidos.
__________________
I (L) Google

Etiquetas: html, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:03.