3v4l.org

run code in 300+ PHP versions simultaneously
<?php // Challenge: make this terrible code safe echo "<!doctype html>\n"; /* ALWAYS make sure to use PHP 5.5.0+ */ if (version_compare(PHP_VERSION, '5.5.0', '<')) { echo "You are using PHP " . PHP_VERSION . ". Please update to PHP 5.5.0 or higher."; exit; } $_GET['username'] = 'mayur'; $_GET['password'] = '12346'; $username = (!empty($_GET['username'])) ? : ((!empty($argv[1])) ? : null); $password = (!empty($_GET['password'])) ? : ((!empty($argv[2])) ? : null); if (empty($username) || empty($password)) { echo "No Username/Password Found!"; exit; } /** * While creating a new User we use password_hash() method to * generate a SALT+HASH string and store it * e.g. * $password = password_hash($password, PASSWORD_DEFAULT); */ try { $pdo = new PDO('sqlite::memory:'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec("DROP TABLE IF EXISTS users"); $pdo->exec("CREATE TABLE users (username VARCHAR(255), password VARCHAR(255))"); /* Set ROOT password (SALT+HASH) */ $rootPassword = password_hash("secret", PASSWORD_DEFAULT); $data = ['username' => 'root', 'password' => $rootPassword]; $query = $pdo->prepare("INSERT INTO users (username, password) VALUES (:username, :password)"); $query->bindValue(':username', $data['username'], PDO::PARAM_STR); $query->bindValue(':password', $data['password'], PDO::PARAM_STR); $query->execute(); /* Select Data */ $statement = $pdo->prepare("SELECT * FROM users WHERE username = :username LIMIT 1"); $statement->bindValue(':username', $username, PDO::PARAM_STR); $statement->execute(); $user = $statement->fetch(PDO::FETCH_ASSOC); // Get the single ROW /** * Verify the password using supplied string & stored SALT+HASH * password_verify(supplied, stored) */ if (!empty($user) && password_verify($password, $user['password'])) { echo "Access granted to $username!<br>\n"; } else { echo "Access denied for $username!<br>\n"; } } catch (PDOException $e) { // Print PDOException message echo $e->getMessage(); }
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 7, Position 2 = 9
Branch analysis from position: 7
1 jumps found. (Code = 79) Position 1 = -2
Branch analysis from position: 9
2 jumps found. (Code = 47) Position 1 = 37, Position 2 = 39
Branch analysis from position: 37
2 jumps found. (Code = 43) Position 1 = 40, Position 2 = 42
Branch analysis from position: 40
1 jumps found. (Code = 79) Position 1 = -2
Branch analysis from position: 42
2 jumps found. (Code = 46) Position 1 = 102, Position 2 = 108
Branch analysis from position: 102
2 jumps found. (Code = 43) Position 1 = 109, Position 2 = 114
Branch analysis from position: 109
1 jumps found. (Code = 42) Position 1 = 118
Branch analysis from position: 118
1 jumps found. (Code = 42) Position 1 = 123
Branch analysis from position: 123
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 114
1 jumps found. (Code = 42) Position 1 = 123
Branch analysis from position: 123
Branch analysis from position: 108
Branch analysis from position: 39
Found catch point at position: 119
Branch analysis from position: 119
2 jumps found. (Code = 107) Position 1 = 120, Position 2 = -2
Branch analysis from position: 120
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/Iq37N
function name:  (null)
number of ops:  124
compiled vars:  !0 = $username, !1 = $argv, !2 = $password, !3 = $pdo, !4 = $rootPassword, !5 = $data, !6 = $query, !7 = $statement, !8 = $user, !9 = $e
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    5     0  E >   ECHO                                                     '%3C%21doctype+html%3E%0A'
    8     1        INIT_FCALL                                               'version_compare'
          2        SEND_VAL                                                 '8.0.0'
          3        SEND_VAL                                                 '5.5.0'
          4        SEND_VAL                                                 '%3C'
          5        DO_ICALL                                         $10     
          6      > JMPZ                                                     $10, ->9
    9     7    >   ECHO                                                     'You+are+using+PHP+8.0.0.+Please+update+to+PHP+5.5.0+or+higher.'
   10     8      > EXIT                                                     
   13     9    >   FETCH_W                      global              $11     '_GET'
         10        ASSIGN_DIM                                               $11, 'username'
         11        OP_DATA                                                  'mayur'
   14    12        FETCH_W                      global              $13     '_GET'
         13        ASSIGN_DIM                                               $13, 'password'
         14        OP_DATA                                                  '12346'
   16    15        FETCH_IS                                         ~15     '_GET'
         16        ISSET_ISEMPTY_DIM_OBJ                         1  ~16     ~15, 'username'
         17        BOOL_NOT                                         ~17     ~16
         18        JMP_SET                                          ~18     ~17, ->24
         19        ISSET_ISEMPTY_DIM_OBJ                         1  ~19     !1, 1
         20        BOOL_NOT                                         ~20     ~19
         21        JMP_SET                                          ~21     ~20, ->23
         22        QM_ASSIGN                                        ~21     null
         23        QM_ASSIGN                                        ~18     ~21
         24        ASSIGN                                                   !0, ~18
   17    25        FETCH_IS                                         ~23     '_GET'
         26        ISSET_ISEMPTY_DIM_OBJ                         1  ~24     ~23, 'password'
         27        BOOL_NOT                                         ~25     ~24
         28        JMP_SET                                          ~26     ~25, ->34
         29        ISSET_ISEMPTY_DIM_OBJ                         1  ~27     !1, 2
         30        BOOL_NOT                                         ~28     ~27
         31        JMP_SET                                          ~29     ~28, ->33
         32        QM_ASSIGN                                        ~29     null
         33        QM_ASSIGN                                        ~26     ~29
         34        ASSIGN                                                   !2, ~26
   19    35        ISSET_ISEMPTY_CV                                 ~31     !0
         36      > JMPNZ_EX                                         ~31     ~31, ->39
         37    >   ISSET_ISEMPTY_CV                                 ~32     !2
         38        BOOL                                             ~31     ~32
         39    > > JMPZ                                                     ~31, ->42
   20    40    >   ECHO                                                     'No+Username%2FPassword+Found%21'
   21    41      > EXIT                                                     
   31    42    >   NEW                                              $33     'PDO'
         43        SEND_VAL_EX                                              'sqlite%3A%3Amemory%3A'
         44        DO_FCALL                                      0          
         45        ASSIGN                                                   !3, $33
   32    46        INIT_METHOD_CALL                                         !3, 'setAttribute'
         47        SEND_VAL_EX                                              3
         48        SEND_VAL_EX                                              2
         49        DO_FCALL                                      0          
   34    50        INIT_METHOD_CALL                                         !3, 'exec'
         51        SEND_VAL_EX                                              'DROP+TABLE+IF+EXISTS+users'
         52        DO_FCALL                                      0          
   35    53        INIT_METHOD_CALL                                         !3, 'exec'
         54        SEND_VAL_EX                                              'CREATE+TABLE+users+%28username+VARCHAR%28255%29%2C+password+VARCHAR%28255%29%29'
         55        DO_FCALL                                      0          
   38    56        INIT_FCALL                                               'password_hash'
         57        SEND_VAL                                                 'secret'
         58        SEND_VAL                                                 '2y'
         59        DO_ICALL                                         $39     
         60        ASSIGN                                                   !4, $39
   39    61        INIT_ARRAY                                       ~41     'root', 'username'
         62        ADD_ARRAY_ELEMENT                                ~41     !4, 'password'
         63        ASSIGN                                                   !5, ~41
   41    64        INIT_METHOD_CALL                                         !3, 'prepare'
         65        SEND_VAL_EX                                              'INSERT+INTO+users+%28username%2C+password%29+VALUES+%28%3Ausername%2C+%3Apassword%29'
         66        DO_FCALL                                      0  $43     
         67        ASSIGN                                                   !6, $43
   42    68        INIT_METHOD_CALL                                         !6, 'bindValue'
         69        SEND_VAL_EX                                              '%3Ausername'
         70        CHECK_FUNC_ARG                                           
         71        FETCH_DIM_FUNC_ARG                               $45     !5, 'username'
         72        SEND_FUNC_ARG                                            $45
         73        SEND_VAL_EX                                              2
         74        DO_FCALL                                      0          
   43    75        INIT_METHOD_CALL                                         !6, 'bindValue'
         76        SEND_VAL_EX                                              '%3Apassword'
         77        CHECK_FUNC_ARG                                           
         78        FETCH_DIM_FUNC_ARG                               $47     !5, 'password'
         79        SEND_FUNC_ARG                                            $47
         80        SEND_VAL_EX                                              2
         81        DO_FCALL                                      0          
   44    82        INIT_METHOD_CALL                                         !6, 'execute'
         83        DO_FCALL                                      0          
   47    84        INIT_METHOD_CALL                                         !3, 'prepare'
         85        SEND_VAL_EX                                              'SELECT+%2A+FROM+users+WHERE+username+%3D+%3Ausername+LIMIT+1'
         86        DO_FCALL                                      0  $50     
         87        ASSIGN                                                   !7, $50
   48    88        INIT_METHOD_CALL                                         !7, 'bindValue'
         89        SEND_VAL_EX                                              '%3Ausername'
         90        SEND_VAR_EX                                              !0
         91        SEND_VAL_EX                                              2
         92        DO_FCALL                                      0          
   49    93        INIT_METHOD_CALL                                         !7, 'execute'
         94        DO_FCALL                                      0          
   50    95        INIT_METHOD_CALL                                         !7, 'fetch'
         96        SEND_VAL_EX                                              2
         97        DO_FCALL                                      0  $54     
         98        ASSIGN                                                   !8, $54
   56    99        ISSET_ISEMPTY_CV                                 ~56     !8
        100        BOOL_NOT                                         ~57     ~56
        101      > JMPZ_EX                                          ~57     ~57, ->108
        102    >   INIT_FCALL                                               'password_verify'
        103        SEND_VAR                                                 !2
        104        FETCH_DIM_R                                      ~58     !8, 'password'
        105        SEND_VAL                                                 ~58
        106        DO_ICALL                                         $59     
        107        BOOL                                             ~57     $59
        108    > > JMPZ                                                     ~57, ->114
   57   109    >   ROPE_INIT                                     3  ~61     'Access+granted+to+'
        110        ROPE_ADD                                      1  ~61     ~61, !0
        111        ROPE_END                                      2  ~60     ~61, '%21%3Cbr%3E%0A'
        112        ECHO                                                     ~60
        113      > JMP                                                      ->118
   59   114    >   ROPE_INIT                                     3  ~64     'Access+denied+for+'
        115        ROPE_ADD                                      1  ~64     ~64, !0
        116        ROPE_END                                      2  ~63     ~64, '%21%3Cbr%3E%0A'
        117        ECHO                                                     ~63
        118    > > JMP                                                      ->123
   61   119  E > > CATCH                                       last         'PDOException'
   63   120    >   INIT_METHOD_CALL                                         !9, 'getMessage'
        121        DO_FCALL                                      0  $66     
        122        ECHO                                                     $66
   64   123    > > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
150.96 ms | 1408 KiB | 19 Q