Advertisement
carlosalvet

api-bitacora

Sep 27th, 2018
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.21 KB | None | 0 0
  1. 2) No te deje entrar por no estar autorizado.
  2.  
  3. -apiserver.local/card/credit: 4, 6
  4. Se agregaron cabeceras para que el recurso de una respuesta unauthorized //No funcionó
  5. Se agregó el mensaje al usuario 401 Unauthorized
  6.  
  7.     #Prohibir el acceso al recurso
  8.    header("HTTP/1.1 401 Unauthorized");
  9.     header("Content-Type: text/html; charset=utf-8");
  10.     exit('HTTP/1.1 401 No Autorizado');
  11.  
  12. 5) Hacer en el recurso card/credit que se restrinja el acceso por autenticación,tomando el ejemplo
  13.  apiserver.local/usuario/read/arg:se espera que el recurso responda HTTP/1.1 401 Unauthorized
  14.  
  15.     #Pregunta ¿esta autorizado?, no entonces prohibe el accceso
  16.    if(!isset(apache_request_headers()["SessionID"])) {
  17.         header("HTTP/1.1 401 Unauthorized");
  18.         header("Content-Type: text/html; charset=utf-8");
  19.         exit('HTTP/1.1 401 No Autorizado');
  20.     }
  21.  
  22. ---EXTRA---
  23. 6) Mandar cabeceras de autorización ligado a la pregunta ¿Esta autorizado?,...
  24.  
  25.        -apiclient.local:apiclient/get:73
  26.        #Mandar cabeceras de autorizado
  27.       curl_setopt($ch, CURLOPT_HTTPHEADER, ['SessionID: 1234']);
  28.    
  29. 7) Dejar de hardcodear 1234 y cambiarlo por una variable cualquiera
  30.  
  31.     #apiclient.local:apiclient/get:71,75
  32.    $str = "1234";
  33.     curl_setopt($ch, CURLOPT_HTTPHEADER, ["SessionID: $str"]);
  34.  
  35. 8) Una función debe de tener una unica responsabilidad, por metodo de extracción se manda la respon-
  36.    sabilidad ajena a otra función
  37.    
  38.    #apiserver.local:card/credit:4
  39.   $this->helper();
  40.    
  41.    #apiserver.local:card/helper:10-17
  42.   function helper() {
  43.         #sí no existe sesión, rescurso restringido
  44.        if(!isset(apache_request_headers()["SessionID"])) {
  45.             header("HTTP/1.1 401 Unauthorized");
  46.             header("Content-Type: text/html; charset=utf-8");
  47.             exit('HTTP/1.1 401 No Autorizado');
  48.         }
  49.    }
  50.  
  51. 9) Se obtiene un ejemplo de una cadena bien formateada de Sessión id y se pone como comentario
  52. #apiserver.local:card/helper:12
  53. #'SessionID: nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",opaque="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"'
  54.  
  55. 10) La siguiente validación en caso de que SessionId exista, es si en la cadena existe nonce y opaque
  56.     y están formateados, sí no responde no autorizado
  57.     #if(!nonce_opaque_exists()) {
  58.        #apiserver.local:card/credit:23-25
  59.        header("HTTP/1.1 401 Unauthorized");
  60.         header("Content-Type: text/html; charset=utf-8");
  61.         exit('HTTP/1.1 401 No Autorizado');
  62.     #}
  63.  
  64. 11) se repite código, al responder no autorizado, esto hace que se refactorice generando otra función
  65.     cuando se generá una nueva función se pone arriba
  66.  
  67.     #apiserver.local:card/credit:10-14
  68.    function response_unauthorized(){
  69.         header("HTTP/1.1 401 Unauthorized");
  70.         header("Content-Type: text/html; charset=utf-8");
  71.         exit('HTTP/1.1 401 No Autorizado');
  72.     }  
  73.  
  74.     #apiserver.local:card/credit:20
  75.    $this->response_unauthorized();
  76.  
  77. 12) Se va a necesitar llamar varias veces a función "apache_request_headers()["SessionID"])" en estos
  78.     casos se almacena previamente en una variable.
  79.  
  80.     #apiserver.local:card/credit:19
  81.    $sessionid = @apache_request_headers()["SessionID"];
  82.     if(!$sessionid) {
  83.         ...
  84.  
  85. 13) Refactorizando linea 20
  86.     if(!$sessionid) $this->response_unauthorized();
  87.  
  88. 14) Validando si no existe nonce en cabeceras, responde no autorizado.
  89.     #apiserver.local:card/helper:19
  90.    if(strpos($sessionid, "nonce") === FALSE) $this->response_unauthorized(); #validar que nonce este en la cadena
  91.  
  92. 15) Realizar pruebas, desde el cliente verificar que no deje pasar cuando se manda "SessionId: 1234"
  93.     y que deje pasar cuando se manda el nonce "SessionId: nonce"
  94.  
  95. #2018-09-17
  96. 16) Válidando si es que existe opaque en las cabeceras.
  97.     #apiserver.local:card/helper:20
  98.    if(strpos($sessionid, "opaque") === FALSE) $this->response_unauthorized(); #validar que opaque este en la cadena
  99.  
  100. #2018-09-17
  101. 17) Se completa el 'código duro" en la llamada, en este caso se pone el llamado completo, y verificar
  102.    que sirva completamente.
  103.    $str = 'SessionID: nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",opaque="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"'
  104.    
  105. #2018-09-17
  106. 18) Se obtienen nonce y opaque directamente de la cabecera recibida "SessionID"
  107.    #Parsear cabecera y recibir nonce y opaque
  108.    @list($nonce, $opaque) = explode(',', $sessionid);
  109.    $nonce = str_replace('nonce=', '', $nonce);
  110.    $opaque = str_replace('opaque=', '', $opaque);
  111.  
  112. #2018-09-20
  113. 19)Objetivo: verificar que el valor de nonce y opaque sea igual que el que ya se tiene.
  114.         #Hardcodear valor nonce y opaque en apiserver.local
  115.         $_nonce = "a1b2c3"; #apiserver.local:card/helper:29
  116.         $_opaque = "abc123"; #apiserver.local:card/helper:30
  117.        
  118. 20)Verificar que nonce sea igual al que el que ya se tiene
  119.         #verificar que nonce sea igual al que ya se tiene
  120.         if($nonce !== $_nonce) $this->response_unauthorized(); #apiserver.local:card/helper:33
  121.  
  122.  
  123. 21)Verificar que opaque sea igual al que el que ya se tiene
  124.         #verificar que opaque sea igual al que ya se tiene
  125.         if($opaque !== $_opaque) $this->response_unauthorized(); #apiserver.local:card/helper:34
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement