Hola,
Yo uso filter_input asi evito el warning de WPCS.
Despues dependiendo del tipo de valor especifico el filtro.
Ejemplo:
$test = filter_input( INPUT_POST, 'test' ); // evito warning WPCS
// aqui suelo aplicar ahora por ejemplo, wp_unslash y sanitize_text_field si mi intencion es guardarlo en la base de datos
$test = ( empty( $test ) ? '' : sanitize_text_field( wp_unslash( $test ) ) );
// o
$test = ( empty( $test ) ? '' : $test );
// ahora $test es un string y sigo con el resto del codigo como por ejemplo
?>
<input name="test" value="<?php echo esc_attr( $test ); ?>"
Pero tienes que diferenciar si lo que quieres es guardar el valor o mostrarlo.
Para guardar en la base de datos se usa normalmente sanitize_*
, y para mostrar se usa esc_*
Si te fijas no he usado esc_attr_e
ya que si que es cierto que lo imprime pero esa funcion traduce ese valor antes de imprimirlo con lo que tienes la posibilidad de que se traduzca, aparte que llamas innecesariamente a otras functions.
Toda function del tipo _*
como esc_attr__
, esc_attr_e
, esc_html__
solo se deberian usar para traducir el valor.
Bueno espero haberme explicado bien, pero aclaro que es como lo hago yo.
Tambien puedes pasar del WPCS y hacer:
$test = '';
if ( ! empty( $_POST['test'] ) ) {
$test = $_POST['test'];
}
// Si guardas en la DB
$test = sanitize_text_field( wp_unslash( $test ) );
// resto del codigo aqui
Si te fijas no uso isset
ya que no sirve de nada combinarlo con empty
.
empty
comprueba si esta definida y el valor no esta vacio.
isset
comprueba si esta definida y no es null
.
Lo puedes cambiar eso ya depende del codigo.
Iniciador del debate
Camilo
(@camilo517)
Hola, gracias por tu respuesta
¿Esta correcto?
<input style="display:none!important" autocomplete="off" type="text" class="input-text" name="test" id="test" value="<?php sanitize_text_field($_POST['test']); ?>" />
return sanitize_text_field(empty($_POST['additional-comment'])) ? $approved : 'spam';
Esto no se como protegerlo
function hwwa_test()
{
if (isset($_POST['test']) && !empty($_POST['test']))
wp_die(__('test', 'test'));
}
add_action('wp_login', 'hwwa_test');
Hola de nuevo,
Te comento, sobre lo que comentastes antes wp_unslash no elimina la /
sino la \
de un string mira el ejemplo.
Como no tengo muy claro que quieres hacer voy por partes y segun entiendo:
– Primer code
:
No esta correcto ya que no compruebas si esta definida y no imprimes el valor.
Te recomiendo lo siguiente pasando del WPCS:
<?php
$mi_valor = '';
if ( ! empty( $_POST['test'] ) ) {
$mi_valor = sanitize_text_field( wp_unslash( $_POST['test'] ) );
}
?>
<input style="display:none!important" autocomplete="off" type="text" class="input-text" name="test" id="test" value="<?php echo esc_attr( $mi_valor ); ?>" />
– Segundo code
:
Esta mal mires por donde lo mires.
Entiendo que quieres devolver el valor spam
o $approved
pero no entiendo esa comprobacion ni donde esta defina la var $approved
.
sanitize_text_field
le debes pasar un string y tu le pasas un boolean.
luego tienes mal formada la operación ternaria, si estas empezando con PHP te aconsejo que uses la manera extendida. ejemplo:
$valor='predeterminado';
if ( lo que sea ) {
$valor = 'otro';
}
la operancion ternaria deberia ser asi:
algo ? si : no;
Como no tengo muy claro ese codigo no uso para el ejemplo.
– Tercer code
:
Ande vas loco!!! :DDD
En serio, no puedes hacerlo tan radicamente, como no tengo el contexto no puedo extenderme ni enterderlo mucho.
Puedo entender que quieres para la ejecucion si no existe test
cuando un usuario inicia sesion, pero el usuario ya tendria las cookies y estaria logueado asi que no me queda claro.
Si estas añadiendo otro campo al login define un error y muestralo o elimina las cookies y redireciona otra vez al login, pero esto lo estoy suponiendo.
Iniciador del debate
Camilo
(@camilo517)
Te recomiendo que le des una ojeada a esto (seguridad en plugins); seguramente con más detalle esto (validar datos de entrada) y como «sanitizar» los datos de entrada de los formularios:
Hola @camilo517,
Como dice @javiercasares y no se ocurrio ya que lo di por hecho es que mires https://developer.wordpress.org/plugins/ para informarte de como realizar un plugin y seguir las pautas de seguridad.
Pero añadiria que antes busques informacion y tutoriales sobre PHP, ya que debes entenderlo antes.
Como comprederas yo u otro voluntario ayudamos a dudas que pueden tener los compañeros pero en tu caso es mas complejo ya que aun no tienes los conocimientos necesarios para programar.
Me parece fantastico que quieras aportar un plugin a la comunidad, pero antes de publicarlo deberias crearlo y comprobar que todo funciona, ya que puedes perjudicar a los usuarios y tu imagen en la comunidad.
Aqui tienes mucha informacion sobre PHP https://www.php.net/manual/es/
Saludos
Iniciador del debate
Camilo
(@camilo517)
Desde el equipo de plugins de WordPress me han dicho que el plugin es seguro. Intentaré investigar mas sobre el tema y mejorarlo
El plugin funciona, lo hice para el proyecto de un cliente y lo compartí por si a alguno le sirve
Saludos y gracias.