Kā pārbaudīt vai WAP/WEB lapas apmeklētājs ir BITE klients

Lai redzētu vai lapas apmeklētājs ir BITE klients, jāpārbauda IP adrese, no kuras lietotājs nāk, un HTTP pieprasījuma virsrakstā jāpārbauda Bite-Account-Id esamība. WAP ir pieejama testa lapa http://wap.biteplius.lt/phone.php - ja šo adresi atver mobilajā tālrunī, ir redzama visa pieejamā informācija.

Ir iespējams noteikt BITE lietotāju pēc Account ID, taču HTTP virsrakstus ir iespējams pārveidot, tādēļ drošības apsvērumu dēļ obligāti jāpārbauda arī IP adrešu loks, lai pārliecinātos, ka apmeklētājs ir BITE klients.

Papildus augstāk minētajam, sākot no 2007.gada 1.oktobra, lietotājs var pievienoties izmantojot MINI OPERA programmnodrošinājumu un izmantot MINI OPERA vārteju. Šiem lietotājiem vārtejas IP adrese ir savādāka.

MINI OPERA izmanto IP adrešu loku 195.189.142.0/23, BITE izmantotais IP adrešu loks redzams zemāk parādītajā piemērā.

Mazajai lapai jāizvērtē:

1. vai lietotāja IP adrese ir no BITE vai MINI OPERA IP adrešu loka;
2. lietotājs - user account_id.

Lietotājs ir BITE klients un izmanto BITE vārteju vai MINI OPERA programmnodrošinājumu, ja apstiprināti tiek abi nosacījumi (account_id nav 0 un lietotāja IP adrese ir no pieļaujamā IP adrešu loka).

<?php
class MobileUser
{
    private $accountId	= 0;

    public
    function __construct()
    {
        if (isset($_SERVER['HTTP_BITE_ACCOUNT_ID']))
            $this->accountId    = $_SERVER['HTTP_BITE_ACCOUNT_ID'];
    }

    /**
     * Tells whether current user is a valid one.
     *
     * @return  boolean
     */
    public
    function isValid()
    {
        return $this->getAccountId() && $this->isValidGateway();
    }

    /**
     * Returns users account id
     *
     * @return  string(?)
     */
    public
    function getAccountId()
    {
        return $this->accountId;
    }

  
  /**
     * Tells whether user uses a valid gateway or not
     *
     * @return  boolean
  */
    private
    function isValidGateway()
    {
        $ip         = $_SERVER['REMOTE_ADDR'];
        //$gateways	= $config->get('valid_gateways');
        $gateways   = array(
                '213.226.131.21',
                '213.226.131.132',
                '213.226.131.133',
                '213.226.131.154',
                '213.226.131.141',
                '213.226.131.149',
                '213.226.131.151',
                '84.15.15.4',
                '84.15.15.5',
                '84.15.15.10',
                '84.15.15.11',
                '84.15.15.12',
                '213.190.37.235',
                '195.189.142.0/23',
            );

        foreach ($gateways as $gateway)
            if (self::ipInRange($ip, $gateway))
            	return true;

        return false;
    }

    /**
     * Tells whether ip is in ip range.
     * Note: could be moved into a separate library.
     *
     * @param   string  $ip
     * @param   string  $ipRange
     * @return  boolean
     */
    private static
    function ipInRange($ip, $ipRange)
    {
        if (false === strpos($ipRange, '/'))
            return $ip == $ipRange;

        list($net, $mask)   = split('/', $ipRange);
        $ipNet              = ip2long($net);
        $ipMask             = ~((1 << (32 - $mask)) - 1);
        $checkIp            = ip2long($ip);
        $checkIpNet         = $checkIp & $ipMask;
        return $checkIpNet == $ipNet;
    }
}
>
 
lv/gateway_code_example.txt · Labota: 2007/10/19 12:00 , veicis martins