Creación de cuentas en una cuenta CPANEL / WHM -- php campo con security camp codereview Relacionados El problema

Creating accounts in a cpanel/whm account


1
vote

problema

Español

Estoy tratando de hacer de este código que crea cuentas en una cuenta CPanel / WHM más segura.

¿Podría alguien decirme lo que debe hacerse para hacer esto más seguro?

  <?php ///////  YOUR WHM LOGIN DATA $whm_user   = "username";      // reseller username $whm_pass   = "password";  // the password you use to login to WHM  ##################################################################################### ##############          END OF SETTINGS. DO NOT EDIT BELOW    ####################### #####################################################################################  $whm_host   = $_SERVER['HTTP_HOST'];  function getVar($name, $def = '') {   if (isset($_REQUEST[$name]))     return $_REQUEST[$name];   else     return $def; }  // Domain name of new hosting account // To create subdomain just pass full subdomain name // Example: newuser.zubrag.com if (!isset($user_domain)) {   $user_domain = getVar('domain'); }  // Username of the new hosting account if (!isset($user_name)) {   $user_name = getVar('user'); }  // Password for the new hosting account if (!isset($user_pass)) {   $user_pass = getVar('password'); }  // New hosting account Package if (!isset($user_plan)) {   $user_plan = getVar('package'); }  // Contact email if (!isset($user_email)) {   $user_email = getVar('email'); }  // if parameters passed then create account if (!empty($user_name)) {    // create account on the cPanel server   $script = "http://{$whm_user}:{$whm_pass}@{$whm_host}:2086/scripts/wwwacct";   $params = "?plan={$user_plan}&domain={$user_domain}&username={$user_name}&password={$user_pass}&contactemail={$user_email}";   $result = file_get_contents($script.$params); } // otherwise show input form else { $frm = <<<EOD EOD; echo $frm; }  ?>   

Editar:

Esto funciona:

  $whm_host   = $_SERVER['SERVER_NAME'];    function getVar($name, $def = '', $sg_method = 'POST') {   switch($sg_method){       case 'POST'   : return isset($_POST[$name])   ? $_POST[$name]   : $def;         break;       case 'GET'    : return isset($_GET[$name])    ? $_GET[$name]    : $def;         break;       case 'COOKIE' : return isset($_COOKIE[$name]) ? $_COOKIE[$name] : $def;         break;       default : return $def;   } }  // Domain name of new hosting account // To create subdomain just pass full subdomain name // Example: newuser.zubrag.com if (!isset($user_domain)) {   $user_domain = getVar('domain'); }  // Username of the new hosting account if (!isset($user_name)) {   $user_name = getVar('user'); }  // Password for the new hosting account if (!isset($user_pass)) {   $user_pass = getVar('password'); }  // New hosting account Package if (!isset($user_plan)) {   $user_plan = getVar('package'); }  // Contact email if (!isset($user_email)) {   $user_email = getVar('email'); }  // if parameters passed then create account if (!empty($user_name)) {    // create account on the cPanel server   $script = "http://{$whm_user}:{$whm_pass}@{$whm_host}:2086/scripts/wwwacct";   $params = "?plan={$user_plan}&domain={$user_domain}&username={$user_name}&password={$user_pass}&contactemail={$user_email}";   $result = file_get_contents($script.$params); } // otherwise show input form else { $frm = <<<EOD EOD; echo $frm; }   
Original en ingles

I am trying to make this code that creates accounts in a cpanel/whm account more secure.

Could someone please let me know what needs to be done to make this more secure?

<?php ///////  YOUR WHM LOGIN DATA $whm_user   = "username";      // reseller username $whm_pass   = "password";  // the password you use to login to WHM  ##################################################################################### ##############          END OF SETTINGS. DO NOT EDIT BELOW    ####################### #####################################################################################  $whm_host   = $_SERVER['HTTP_HOST'];  function getVar($name, $def = '') {   if (isset($_REQUEST[$name]))     return $_REQUEST[$name];   else     return $def; }  // Domain name of new hosting account // To create subdomain just pass full subdomain name // Example: newuser.zubrag.com if (!isset($user_domain)) {   $user_domain = getVar('domain'); }  // Username of the new hosting account if (!isset($user_name)) {   $user_name = getVar('user'); }  // Password for the new hosting account if (!isset($user_pass)) {   $user_pass = getVar('password'); }  // New hosting account Package if (!isset($user_plan)) {   $user_plan = getVar('package'); }  // Contact email if (!isset($user_email)) {   $user_email = getVar('email'); }  // if parameters passed then create account if (!empty($user_name)) {    // create account on the cPanel server   $script = "http://{$whm_user}:{$whm_pass}@{$whm_host}:2086/scripts/wwwacct";   $params = "?plan={$user_plan}&domain={$user_domain}&username={$user_name}&password={$user_pass}&contactemail={$user_email}";   $result = file_get_contents($script.$params); } // otherwise show input form else { $frm = <<<EOD EOD; echo $frm; }  ?> 

EDIT:

This works:

$whm_host   = $_SERVER['SERVER_NAME'];    function getVar($name, $def = '', $sg_method = 'POST') {   switch($sg_method){       case 'POST'   : return isset($_POST[$name])   ? $_POST[$name]   : $def;         break;       case 'GET'    : return isset($_GET[$name])    ? $_GET[$name]    : $def;         break;       case 'COOKIE' : return isset($_COOKIE[$name]) ? $_COOKIE[$name] : $def;         break;       default : return $def;   } }  // Domain name of new hosting account // To create subdomain just pass full subdomain name // Example: newuser.zubrag.com if (!isset($user_domain)) {   $user_domain = getVar('domain'); }  // Username of the new hosting account if (!isset($user_name)) {   $user_name = getVar('user'); }  // Password for the new hosting account if (!isset($user_pass)) {   $user_pass = getVar('password'); }  // New hosting account Package if (!isset($user_plan)) {   $user_plan = getVar('package'); }  // Contact email if (!isset($user_email)) {   $user_email = getVar('email'); }  // if parameters passed then create account if (!empty($user_name)) {    // create account on the cPanel server   $script = "http://{$whm_user}:{$whm_pass}@{$whm_host}:2086/scripts/wwwacct";   $params = "?plan={$user_plan}&domain={$user_domain}&username={$user_name}&password={$user_pass}&contactemail={$user_email}";   $result = file_get_contents($script.$params); } // otherwise show input form else { $frm = <<<EOD EOD; echo $frm; } 
     
         
         

Lista de respuestas

2
 
vote

Vamos a empezar con el pescado fácil - var item = result.SingleOrDefault(e => e == "Order"); if (item != null) { baseTypes.Add(item); } item = result.SingleOrDefault(e => e == "Motion"); 3 . Ir por la manual de PHP , var item = result.SingleOrDefault(e => e == "Order"); if (item != null) { baseTypes.Add(item); } item = result.SingleOrDefault(e => e == "Motion"); 4 es una combinación de var item = result.SingleOrDefault(e => e == "Order"); if (item != null) { baseTypes.Add(item); } item = result.SingleOrDefault(e => e == "Motion"); 5 , var item = result.SingleOrDefault(e => e == "Order"); if (item != null) { baseTypes.Add(item); } item = result.SingleOrDefault(e => e == "Motion"); 6 y var item = result.SingleOrDefault(e => e == "Order"); if (item != null) { baseTypes.Add(item); } item = result.SingleOrDefault(e => e == "Motion"); 7 .

En su función var item = result.SingleOrDefault(e => e == "Order"); if (item != null) { baseTypes.Add(item); } item = result.SingleOrDefault(e => e == "Motion"); 8 , hace referencia a la Solicitud Superglobal, y en las siguientes líneas, lo usa para obtener una contraseña. El uso de la solicitud Superglobal permitiría que se le proporcione una contraseña a través de métodos inseguros, como obtener y cookie. Idealmente, desea publicar datos sensibles como una contraseña, por lo que modifiquemos el código para simplemente agarrar desde la publicación de forma predeterminada, y agreguemos un tercer parámetro en caso de que necesitemos obtener ciertos valores de obtener o cookie.

  var item = result.SingleOrDefault(e => e == "Order"); if (item != null) {     baseTypes.Add(item); } item = result.SingleOrDefault(e => e == "Motion"); 9  

Un problema de seguridad deslumbrante es la siguiente línea:

  string[] keys = {"Order", "Motion", .....}; 0  

Tienes que recordar que HTTP_HOST se obtiene de un encabezado definido por el usuario. A menos que un requisito de negocios lo denice, debe usar Server_name. Consulte http_host vs. server_name en el desbordamiento de la pila para una mejor explicación: específicamente Esta respuesta por Balusc .

Ahora, podemos comprimir las múltiples declaraciones de IF en un foreach más simple, de la siguiente manera:

  string[] keys = {"Order", "Motion", .....}; 1  

a continuación es cómo he modificado su código:

  string[] keys = {"Order", "Motion", .....}; 2  
 

Let's start with the easy fish - $_REQUEST. Going by the PHP manual, $_REQUEST is a combination of $_POST, $_GET, and $_COOKIE.

In your getVar(...) function, you reference the request superglobal, and in the following lines, you use it to get a password. Using the request superglobal would allow a password to be given in via insecure methods like GET and COOKIE. Ideally, you want to POST any sensitive data like a password, so let's modify the code to just grab from POST by default, and let's add a third parameter in case we need to get certain values from GET or COOKIE.

function getVar($name, $def = '', $sg_method = 'POST') {   switch($sg_method){       case 'POST'   : return isset($_POST[$name])   ? $_POST[$name]   : $def;         break;       case 'GET'    : return isset($_GET[$name])    ? $_GET[$name]    : $def;         break;       case 'COOKIE' : return isset($_COOKIE[$name]) ? $_COOKIE[$name] : $def;         break;       default : return $def;   } } 

One glaring security issue is the following line:

$whm_host = $_SERVER['HTTP_HOST']; 

You have to remember that HTTP_HOST is gotten from a user-defined header. Unless a business requirement dictates it, you should use SERVER_NAME. See HTTP_HOST vs. SERVER_NAME on Stack Overflow for a better explanation - specifically this answer by BalusC.

Now, we can compress the multiple IF statements into a simpler foreach, as follows:

$user_data = array(     "domain"   => array($user_domain, 'user_domain'),     "user"     => array($user_name,   'user_name'),     "password" => array($user_pass,   'user_pass'),     "package"  => array($user_plan,   'user_plan'),     "email"    => array($user_email,  'user_email') );  foreach($user_data as $key => $val){     if(empty($val[0])){         $$val[1] = getVar($key);     } } 

Below is how I've modified your code:

# Your WHM login data $whm_user   = "username";  # reseller username $whm_pass   = "password";  # the password you use to login to WHM  ##################################################################################### ##############          END OF SETTINGS. DO NOT EDIT BELOW    ####################### #####################################################################################  $whm_host   = $_SERVER['HTTP_HOST'];  function getVar($name, $def = '', $sg_method = 'POST') {   switch($sg_method){       case 'POST' : return isset($_POST[$name]) ? $_POST[$name] : $def;         break;       case 'GET' : return isset($_GET[$name]) ? $_GET[$name] : $def;         break;       case 'COOKIE' : return isset($_COOKIE[$name]) ? $_COOKIE[$name] : $def;   } }  # Domain name of new hosting account # To create subdomain just pass full subdomain name # Example: newuser.zubrag.com $user_data = array(     "domain"   => array($user_domain, 'user_domain'),     "user"     => array($user_name,   'user_name'),     "password" => array($user_pass,   'user_pass'),     "package"  => array($user_plan,   'user_plan'),     "email"    => array($user_email,  'user_email') );  foreach($user_data as $key => $val){     if(empty($val[0])){         $$val[1] = getVar($key);     } }  # if parameters passed then create account if (!empty($user_name)) {   # create account on the cPanel server   $script = "http:#{$whm_user}:{$whm_pass}@{$whm_host}:2086/scripts/wwwacct";   $params = "?plan={$user_plan}&domain={$user_domain}&username={$user_name}&password={$user_pass}&contactemail={$user_email}";   $result = file_get_contents($script.$params); } else {     $frm = <<<EOD EOD;     echo $frm; } 
 
 
   
   

Relacionados problema

8  Convertir un segurreque en una matriz de bytes  ( Converting a securestring to a byte array ) 
¿Asigna algo que no ha liberado? ¿Algo que permanece en la memoria? Excepto la matriz de bytes de resultado, OFC. checkOnline.sh1 ...

11  ¿Es esta una forma suficiente de prevenir las inyecciones de guiones y otras cosas malas en las cuerdas?  ( Is this a sufficient way to prevent script injections and other bad stuff in str ) 
¿Esta función será suficiente para eliminar todo el código malicioso y los caracteres extraños de una cadena? import java.security.SecureRandom; import jav...

10  Generando tokens de sesión difícil de adivinar  ( Generating hard to guess session tokens ) 
¿Este código crea tokens de sesión suficientemente difíciles de adivinar, asumiendo que el servidor y el cliente se comunican a través de HTTPS? Tomar 2 ...

1  ¿Cómo puedo determinar y probar Vunerabilidades de inyección de SQL en este código de inicio de sesión?  ( How can i ascertain and test sql injection vunerabilities on this login code ) 
Sé que el escenario "Little Bobby Tablas" y se estaba preguntando si este código es vulnerable a tales inyecciones de SQL. Soy bastante nuevo en PHP y teng...

3  Formulario de contacto de WordPress PHP - Fallas de seguridad  ( Wordpress php contact form security flaws ) 
Tengo el siguiente formulario de contacto incluido con mi tema de WordPress como plantilla. Ahora, un usuario en StackOverFlow señaló que este formulario ti...

51  Cifrado seguro simplificado de una cadena  ( Simplified secure encryption of a string ) 
Tengo dos ejemplos de código que escribí para las mejores prácticas cifrando una cadena que busco comentarios tanto en términos de mejores prácticas y segurid...

6  Programa de recuperación de contraseña  ( Password recovery program ) 
Este es un programa de recuperación de contraseña que hice, y solo quiero que se revise. Estos no son todos los archivos para el sistema de inicio de sesión y...

2  Formulario básico de comentarios de PHP  ( Basic php comment form ) 
Soy un novato de programación. He escrito este simple script PHP para ejecutar un formulario de comentarios muy básico y apreciaría cualquier comentario, espe...

11  Cifrado simétrico en C #  ( Symmetrical encryption in c ) 
Estoy tratando de cifrar simétricamente algunos datos utilizando C #, y parece que hay mucha información engañosa o incorrecta en el sujeto. He creado un pr...

1  Simple Node.js WebServer  ( Simple node js webserver ) 
Estoy en el proceso de escribir un servidor web simple.js. Estoy a mitad de camino en términos de funcionalidad. Consulte el código completo en este pastebin...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos