Visualizzazione risultati 1 fino 8 di 8

Discussione: dubbio sulla sicurezza

  1. #1
    Guest

    Predefinito dubbio sulla sicurezza

    ciao a tutti, premetto che sono un neofita di php pertanto chiedo a voi.
    Ho realizzato un programma con autohotkey che per gestire il periodo di prova (confronta due date) si connette al mio database mysql tramite questo script php:

    Codice PHP:
    <?php
    ////////////////////////////////////////////////////////

    // required security key to run this script
    $sec_key = "xxxxxxxxxxxxxxxxxxxxx";

    // database login
    $host="localhost"; // Host name "localhost"
    $username="xxxxxxxxxxxx"; // Mysql username
    $password=""; // Mysql password
    $db_name="xxxxxxxxxxx"; // Database name

    ////////////////////////////////////////////////////////

    // start logfile
    logfile("-----------------------------------------------------");

    // compare security key
    if($_GET['key'] != $sec_key){
    logfile("security key doesn't match! Aborting ...");
    die(
    "AHKERROR:100");
    } else {
    logfile("security key matches");
    }

    // read SQL command from URL
    $query = $_GET['query'];

    // error when sql command too short
    if (strlen($query) < 5) {
    logfile("error: no sql command found! (query < 5 chars) Aborting ...");
    die(
    "AHKERROR:200");
    }
    else
    logfile("received SQL command from URL");

    // URL decoding
    // changing the "¡" and the "±" to an "!" and "+-" here
    $url_decoder = array("%20"=>" ","%21"=>"!","%22"=>'"',"%23"=>"#","%24"=>"$","%25"=>"%","%26"=>"&","%27"=>"'","%28"=>"(","%29"=>")",
    "%2A"=>"*","%2B"=>"+","%2C"=>",","%2D"=>"-","%2E"=>".","%2F"=>"/","%30"=>"0","%31"=>"1","%32"=>"2","%33"=>"3","%34"=>"4","%35"=>"5",
    "%36"=>"6","%37"=>"7","%38"=>"8","%39"=>"9","%3A"=>":","%3B"=>";","%3C"=>"<","%3D"=>"=","%3E"=>">","%3F"=>"?","%40"=>"@","%41"=>"A",
    "%42"=>"B","%43"=>"C","%44"=>"D","%45"=>"E","%46"=>"F","%47"=>"G","%48"=>"H","%49"=>"I","%4A"=>"J","%4B"=>"K","%4C"=>"L","%4D"=>"M",
    "%4E"=>"N","%4F"=>"O","%50"=>"P","%51"=>"Q","%52"=>"R","%53"=>"S","%54"=>"T","%55"=>"U","%56"=>"V","%57"=>"W","%58"=>"X","%59"=>"Y",
    "%5A"=>"Z","%5B"=>"[","%5C"=>"\\","%5D"=>"]","%5E"=>"^","%5F"=>"_","%60"=>"`","%61"=>"a","%62"=>"b","%63"=>"c","%64"=>"d","%65"=>"e",
    "%66"=>"f","%67"=>"g","%68"=>"h","%69"=>"i","%6A"=>"j","%6B"=>"k","%6C"=>"l","%6D"=>"m","%6E"=>"n","%6F"=>"o","%70"=>"p","%71"=>"q",
    "%72"=>"r","%73"=>"s","%74"=>"t","%75"=>"u","%76"=>"v","%77"=>"w","%78"=>"x","%79"=>"y","%7A"=>"z","%7B"=>"{","%7C"=>"|","%7D"=>"}",
    "%7E"=>"~","%80"=>"€","%82"=>"‚","%83"=>"ƒ","%84"=>"„","%85"=>"…","%86"=>"†","%87"=>"‡","%88"=>"ˆ","%89"=>"‰","%8A"=>"Š","%8B"=>"‹",
    "%8C"=>"Œ","%8E"=>"Ž","%91"=>"‘","%92"=>"’","%93"=>"“","%94"=>"”","%95"=>"•","%96"=>"–","%97"=>"—","%98"=>"˜","%99"=>"™","%9A"=>"š",
    "%9B"=>"›","%9C"=>"œ","%9E"=>"ž","%9F"=>"Ÿ","%A1"=>"!","%A2"=>"¢","%A3"=>"£","%A5"=>"¥","%A6"=>"|","%A7"=>"§","%A8"=>"¨","%A9"=>"©",
    "%AA"=>"ª","%AB"=>"«","%AC"=>"¬","%AD"=>"¯","%AE"=>"®","%AF"=>"¯","%B0"=>"°","%B1"=>"+-","%B2"=>"²","%B3"=>"³","%B4"=>"´","%B5"=>"µ",
    "%B6"=>"¶","%B7"=>"·","%B8"=>"¸","%B9"=>"¹","%BA"=>"º","%BB"=>"»","%BC"=>"¼","%BD"=>"½","%BE"=>"¾","%BF"=>"¿","%C0"=>"À","%C1"=>"Á",
    "%C2"=>"Â","%C3"=>"Ã","%C4"=>"Ä","%C5"=>"Å","%C6"=>"Æ","%C7"=>"Ç","%C8"=>"È","%C9"=>"É","%CA"=>"Ê","%CB"=>"Ë","%CC"=>"Ì","%CD"=>"Í",
    "%CE"=>"Î","%CF"=>"Ï","%D0"=>"Ð","%D1"=>"Ñ","%D2"=>"Ò","%D3"=>"Ó","%D4"=>"Ô","%D5"=>"Õ","%D6"=>"Ö","%D8"=>"Ø","%D9"=>"Ù","%DA"=>"Ú",
    "%DB"=>"Û","%DC"=>"Ü","%DD"=>"Ý","%DE"=>"Þ","%DF"=>"ß","%E0"=>"à","%E1"=>"á","%E2"=>"â","%E3"=>"ã","%E4"=>"ä","%E5"=>"å","%E6"=>"æ",
    "%E7"=>"ç","%E8"=>"è","%E9"=>"é","%EA"=>"ê","%EB"=>"ë","%EC"=>"ì","%ED"=>"í","%EE"=>"î","%EF"=>"ï","%F0"=>"ð","%F1"=>"ñ","%F2"=>"ò",
    "%F3"=>"ó","%F4"=>"ô","%F5"=>"õ","%F6"=>"ö","%F7"=>"÷","%F8"=>"ø","%F9"=>"ù","%FA"=>"ú","%FB"=>"û","%FC"=>"ü","%FD"=>"ý","%FE"=>"þ",
    "%FF"=>"ÿ","\\"=>"");
    $query = strtr($query, $url_decoder);

    // connect to database
    mysql_select_db($db_name, mysql_connect($host, $username, $password));

    // in case the query is an SELECT command, prepare for return the value
    if(stripos($query,"SELECT") !== false) $select = true;
    else
    $select = false;

    // case query failed
    if (!$sql_return = mysql_query($query)) {
    $mysql_error_short = str_replace("You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use","Syntax error",mysql_error()); // prevents unnecessarily long text to be written to the logfile
    logfile('failed command: '.$query.'. SQL feedback: ' . $mysql_error_short);
    die(
    "AHKERROR:300:" . $mysql_error_short);
    }

    // case query succeeded
    if ($select == true) {
    while (
    $sql_return_arr = mysql_fetch_row($sql_return)) {
    $sql_return_arr = str_replace("¡","!",$sql_return_arr); // escaping the separator signs here is necessary
    $sql_return_arr = str_replace("±","+-",$sql_return_arr);
    $cols[$i++] = implode("¡",$sql_return_arr);
    }
    echo
    implode("±",$cols);
    }
    else echo
    "AHKSUCCESS";

    // log an success message
    logfile("SQL command was executed and outputted successfully.");


    // write loggings to a logfile.txt in the same folder
    function logfile($string) {
    $today = date("m.d.y H:i:s");
    $string = $today.": ".$string."\n";
    $handler = fOpen("logfile.txt" , "a+");
    fWrite($handler , $string);
    fClose($handler);
    }

    ///// Dietmar Sach, 29.12.2010
    ?>
    Poichè in futuro vorrei distribuire il programma, vorrei sapere a quali rischi mi espone un sistema del genere... gli eventuali rischi riguardano solo la sicurezza del database o anche la sicurezza di chi si connette?

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Non ho ben capito come dovrebbe operare questo script con il tuo programma, ma lo script PHP mi sembra pericoloso scritto così in quanto chiunque sappia il valore della variabile $sec_key (il quale credo venga spedito in una normale richiesta HTTP, e dunque in chiaro sulla rete) può eseguire una qualsiasi query e ha dunque l'accesso completo al tuo database MySQL.

  3. #3
    Guest

    Predefinito

    Lo script php permette di agire sul database direttamente da autohotkey, a questa pagina viene spiegato come http://www.autohotkey.com/board/topi...rface-ahk2sql/

    lo script PHP mi sembra pericoloso scritto così in quanto chiunque sappia il valore della variabile $sec_key (il quale credo venga spedito in una normale richiesta HTTP, e dunque in chiaro sulla rete)
    quindi mi stai dicendo che in sostanza la "security key" è del tutto inutile? come posso risolvere?

  4. #4
    Guest

    Predefinito

    ho attivato l'https e ho verificato che il contenuto della connessione e quindi la security key non è più "in chiaro"... problema risolto?

  5. #5
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Non mi è ancora ben chiaro questo:
    Citazione Originalmente inviato da provare1 Visualizza messaggio
    Ho realizzato un programma con autohotkey che per gestire il periodo di prova (confronta due date) si connette al mio database mysql
    Chi userà poi questo programma, sarà necessariamente in possesso della sec_key poiché codificate nel programma stesso. E dunque avrà l'accesso all'intero database.
    Ora, a seconda di chi è destinato il tuo programma, questo potrebbe essere un problema di sicurezza.

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da karl94 Visualizza messaggio
    Non mi è ancora ben chiaro questo:

    Chi userà poi questo programma, sarà necessariamente in possesso della sec_key poiché codificate nel programma stesso. E dunque avrà l'accesso all'intero database.
    Ora, a seconda di chi è destinato il tuo programma, questo potrebbe essere un problema di sicurezza.
    Chi userà il programma sarà in possesso della sec_key (ma non la conoscerà) in quanto inclusa nel codice del programma. L'unico modo per scoprirla consisterebbe nel decompilare l'exe.

  7. #7
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Citazione Originalmente inviato da provare1 Visualizza messaggio
    L'unico modo per scoprirla consisterebbe nel decompilare l'exe.
    Non sarei così sicuro che sia l'unico, comunque considera che è possibile recuperarla e nemmeno troppo difficile.

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da karl94 Visualizza messaggio
    Non sarei così sicuro che sia l'unico, comunque considera che è possibile recuperarla e nemmeno troppo difficile.
    in che modo? violando l'https? in ogni caso secondo te cosa dovrei fare per rendere più sicuro il tutto?

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •