<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gonzalo López</title>
    <description>The latest articles on DEV Community by Gonzalo López (@gonzalo_lpez_18346c27391).</description>
    <link>https://dev.to/gonzalo_lpez_18346c27391</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4184891%2F7a220047-8518-486c-ac20-0bf80d7c5480.jpg</url>
      <title>DEV Community: Gonzalo López</title>
      <link>https://dev.to/gonzalo_lpez_18346c27391</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gonzalo_lpez_18346c27391"/>
    <language>en</language>
    <item>
      <title>php2shell: qué es la vulnerabilidad crítica de php, cómo afecta y cómo proteger tu servidor</title>
      <dc:creator>Gonzalo López</dc:creator>
      <pubDate>Fri, 23 Oct 2026 13:06:51 +0000</pubDate>
      <link>https://dev.to/gonzalo_lpez_18346c27391/php2shell-que-es-la-vulnerabilidad-critica-de-php-como-afecta-y-como-proteger-tu-servidor-4b88</link>
      <guid>https://dev.to/gonzalo_lpez_18346c27391/php2shell-que-es-la-vulnerabilidad-critica-de-php-como-afecta-y-como-proteger-tu-servidor-4b88</guid>
      <description>&lt;h1&gt;
  
  
  php2shell: qué es la vulnerabilidad crítica de php, cómo afecta y cómo proteger tu servidor
&lt;/h1&gt;

&lt;p&gt;PHP2Shell es el nombre que se ha dado a dos vulnerabilidades críticas descubiertas en el núcleo de PHP. Se trata de fallos de seguridad de memoria que permiten a un atacante no autenticado ejecutar código remoto, o RCE, o filtrar información sensible de la memoria del proceso PHP. La gravedad alcanza un CVSS de 9.2 y afecta incluso a aplicaciones simples, porque el problema está en el propio motor de PHP, no en el código de la aplicación.Estas vulnerabilidades fueron reportadas de forma responsable y se publicaron el 21 de octubre de 2026, junto con las versiones parcheadas de PHP. ¿Qué es exactamente PHP2Shell? PHP2Shell agrupa dos vulnerabilidades relacionadas: CVE-2026-109618: Corrupción de memoria por manejo incorrecto de condiciones de falta de memoria, Out-Of-Memory o OOM. Cuando PHP se queda sin memoria en un momento crítico del procesamiento de una petición, puede dejar datos a medio inicializar que luego se tratan como válidos. CVE-2026-109619: Estado global obsoleto, "stale global state", que sobrevive entre peticiones. Un fallo o timeout puede dejar punteros o datos de una petición anterior, provocando use-after-free y, potencialmente, divulgación de memoria o ejecución de código. Ambas se activan durante el procesamiento de la petición, antes de que se ejecute el código de la aplicación. Por eso plugins de seguridad, firewalls de aplicación o código bien escrito no protegen por sí solos: el fallo está en el intérprete PHP.Los investigadores, Calif, vinculado a proyectos de OpenAI, y Wiz), demostraron ejecución de código pre-autenticación en entornos como WordPress, Drupal y Joomla, así como la posibilidad de leer memoria del proceso, como contraseñas, tokens, claves API, certificados, etc. Versiones afectadas y versiones corregidas Están afectadas las versiones de PHP desde aproximadamente la 5.4 hasta las anteriores a los parches de octubre de 2026. Versiones corregidas oficiales Rama PHP Vulnerable Corregida en 8.2 &amp;lt; 8.2.35 8.2.35 8.3 &amp;lt; 8.3.36 8.3.36 8.4 &amp;lt; 8.4.27 8.4.27 8.5 &amp;lt; 8.5.12 8.5.12 Las versiones 8.1 y anteriores están fuera de soporte oficial. No hay parches oficiales de PHP para ellas. Algunas distribuciones, como Ubuntu, Debian, Remi, etc., han publicado backports en ciertos casos, pero la recomendación prioritaria es migrar a una rama soportada. Impacto real PHP impulsa aproximadamente el 70 % de los sitios web con lenguaje de servidor conocido. WordPress, Laravel, Drupal, Joomla, Magento y multitud de aplicaciones personalizadas dependen de él. Un servidor con PHP sin parchear puede ser comprometido sin necesidad de credenciales ni de un fallo en el código de la aplicación.Se han detectado intentos de explotación incluso antes de la divulgación pública. Tras la publicación de los detalles, el volumen de tráfico malicioso aumentó.Además de la ejecución de código, la divulgación de memoria puede exponer secretos de otras peticiones o del propio servidor, lo que obliga a rotar credenciales si se sospecha exposición. Cómo comprobar si se está afectado Verificar la versión de PHP que realmente usa el servidor web. Revisar también los procesos de PHP-FPM, Apache o el contenedor correspondiente. Confirma que la versión sea al menos "8.2.35", "8.3.36", "8.4.27" o "8.5.12", o un paquete de distribución que incluya los CVEs en el changelog. Reiniciar todos los workers de PHP después de actualizar, Apache, PHP-FPM, etc.. Un simple "php -v" actualizado no basta si los procesos antiguos siguen en memoria. Qué hacer Actualizar PHP inmediatamente a una de las versiones corregidas. Es la única mitigación completa según el equipo de PHP. Reinicia todos los servicios que ejecutan PHP (Apache, Nginx + PHP-FPM, contenedores, etc.). Si usas una versión EOL (≤ 8.1), planifica la migración a una rama soportada con urgencia. Revisa logs de acceso y errores desde al menos el 17 de octubre de 2026 en busca de actividad anómala (peticiones multipart grandes, patrones inusuales, etc.). Si el servidor pudo haber estado expuesto, rota contraseñas, tokens de API, claves de sesión y certificados. Mantén un inventario de todos los entornos PHP (producción, staging, antiguos proyectos olvidados). El servidor “olvidado” suele ser el más vulnerable. Algunos proveedores de hosting y &lt;/p&gt;

</description>
      <category>php</category>
      <category>spanish</category>
      <category>programacion</category>
    </item>
    <item>
      <title>phprunner acelera apps PHP profesionales</title>
      <dc:creator>Gonzalo López</dc:creator>
      <pubDate>Tue, 20 Oct 2026 14:24:29 +0000</pubDate>
      <link>https://dev.to/gonzalo_lpez_18346c27391/phprunner-acelera-apps-php-profesionales-2ng7</link>
      <guid>https://dev.to/gonzalo_lpez_18346c27391/phprunner-acelera-apps-php-profesionales-2ng7</guid>
      <description>&lt;h1&gt;
  
  
  phprunner acelera apps PHP profesionales
&lt;/h1&gt;

&lt;p&gt;¿Qué es PHPRunner? PHPRunner es una potente herramienta de desarrollo, creada por Xlinesoft, que permite generar aplicaciones web PHP completas a partir de bases de datos existentes. Conecta con MySQL, MariaDB, SQL Server, PostgreSQL, Oracle y otros motores, y en pocos clics genera interfaces CRUD, Create, Read, Update, Delete, paneles de administración, formularios avanzados, informes y dashboards. A diferencia de los generadores tradicionales, PHPRunner produce código PHP, legible y modificable. No se trata de una caja negra: el desarrollador mantiene el control total sobre el código generado y puede personalizarlo según las necesidades del proyecto. Principales características de PHPRunner PHPRunner destaca por una serie de funcionalidades orientadas a productividad y calidad de código: Generación automática de aplicaciones CRUD: Crea listados, formularios de alta, edición y detalle con validaciones, búsquedas avanzadas y filtros en minutos. Diseño visual de interfaces: Editor drag-and-drop para personalizar layouts, campos, botones y menús sin escribir HTML o CSS desde cero. Seguridad integrada: Sistema de usuarios, roles y permisos, protección contra inyección SQL, XSS y CSRF, y autenticación con login personalizable. Soporte multidioma y responsive: Aplicaciones adaptadas a dispositivos móviles y con traducción sencilla. Informes y gráficos: Generación de reportes exportables a PDF, Excel o CSV, junto con gráficos dinámicos. Eventos y código personalizado: Posibilidad de insertar código PHP, JavaScript o SQL en puntos clave del ciclo de vida de la aplicación. Integración con APIs y servicios externos: Facilidad para conectar con servicios REST, envío de correos, almacenamiento en la nube y más. Ventajas de usar PHPRunner en proyectos reales Para desarrolladores PHP y equipos de trabajo, PHPRunner ofrece beneficios concretos: Reducción drástica del tiempo de desarrollo: Lo que normalmente llevaría semanas de programación manual se resuelve en horas o días. Código limpio y mantenible: El código generado sigue buenas prácticas y puede modificarse libremente. Ideal para prototipos y MVPs: Permite validar ideas de negocio rápidamente sin sacrificar calidad técnica. Escalabilidad: Adecuado tanto para aplicaciones internas de gestión como para sistemas más complejos orientados a clientes. Curva de aprendizaje moderada: Desarrolladores con conocimientos de PHP y bases de datos se adaptan rápidamente. Muchos equipos utilizan PHPRunner para construir paneles de administración, sistemas de inventario, CRM ligeros, gestores de contenido personalizados y herramientas internas de empresas. Cómo funciona el flujo de trabajo con PHPRunner El proceso típico es sencillo y eficiente: Conectar la base de datos existente o crear una nueva. Seleccionar las tablas y relaciones que formarán parte de la aplicación. Configurar campos, validaciones, permisos y apariencia visual mediante la interfaz gráfica. Añadir lógica personalizada a través de eventos (antes de insertar, después de actualizar, etc.). Generar el código PHP y desplegarlo en cualquier servidor compatible (Apache, Nginx, IIS) con PHP 7.4 o superior. Una vez generada la aplicación, el desarrollador puede seguir trabajando sobre el código fuente, integrarlo con frameworks existentes o continuar ampliándolo desde PHPRunner en versiones posteriores. ¿Cuándo conviene utilizar PHPRunner? PHPRunner brilla especialmente en los siguientes escenarios: Desarrollo de sistemas de gestión interna (ERP ligeros, control de stock, RRHH, etc.). Creación rápida de back-offices y paneles de administración. Proyectos donde el tiempo de entrega es crítico. Equipos que necesitan entregar soluciones funcionales sin renunciar a la posibilidad de personalización profunda. No es la mejor opción cuando se requiere una arquitectura muy específica basada en frameworks modernos como Laravel o Symfony desde el inicio, aunque el código generado puede integrarse o servir de base para evolucionar hacia esas tecnologías. Conclusión: productividad sin renunciar al control PHPRunner se ha consolidado como una de las herramientas más interesantes del ecosistema PHP para quienes buscan combinar velocidad de desarrollo con código de calidad. Su enfoque low-code no elimina al programador, sino que lo potencia, permitiéndole centrarse en la lógica de negocio y en las personalizaciones de valor. Si trabajas habitualmente con bases de datos y necesitas entregar aplicaciones web funcionales en plazos ajustados, PHPRunner merece una prueba seria. La inversión en tiempo de aprendizaje se recupera rápidamente en el primer proyecto. &lt;/p&gt;

</description>
      <category>php</category>
      <category>spanish</category>
      <category>programacion</category>
    </item>
    <item>
      <title>Heredoc en PHP: cómo funciona y ejemplos prácticos</title>
      <dc:creator>Gonzalo López</dc:creator>
      <pubDate>Mon, 19 Oct 2026 13:23:12 +0000</pubDate>
      <link>https://dev.to/gonzalo_lpez_18346c27391/heredoc-en-php-como-funciona-y-ejemplos-practicos-127f</link>
      <guid>https://dev.to/gonzalo_lpez_18346c27391/heredoc-en-php-como-funciona-y-ejemplos-practicos-127f</guid>
      <description>&lt;h1&gt;
  
  
  Heredoc en PHP: cómo funciona y ejemplos prácticos
&lt;/h1&gt;

&lt;p&gt;Siempre que quiero mostrar una cadena en php uso la función echo pero hace ya un tiempo que empiezo a ver una forma diferente de procesar cadenas y es usando heredoc que facilita demasiado las cosas, sobre todo si se van a usar comillas o comillas dobles dentro de esa cadena. El uso de heredoc es muy útil cuando se van a crear cadenas html dentro de php.¿Cómo se usa heredoc? El identificador de cierre puede ser cualquier combinación de letras; convencionalmente se suele usar EOT o EOF, vale cualquier otro (siempre que NO este incluido en el texto !!) y debe incluirse al comienzo de la linea (sin espacios en blanco ni tabuladores, ni comentarios), La linea no puede incluir detrás ningun otro carácter, salvo un punto y coma. Es mas, si escribes tu código con un editor windows, también puedes tener problemas si incluyes un retorno de carro (ENTER) ya que windows no termina las lineas con un carácter de nueva línea (n) sino rn.Ejemplo: $str = &lt;/p&gt;

</description>
      <category>php</category>
      <category>spanish</category>
      <category>programacion</category>
    </item>
    <item>
      <title>Laravel Backup: cómo hacer copIAs de seguridad</title>
      <dc:creator>Gonzalo López</dc:creator>
      <pubDate>Mon, 19 Oct 2026 13:20:46 +0000</pubDate>
      <link>https://dev.to/gonzalo_lpez_18346c27391/laravel-backup-como-hacer-copias-de-seguridad-4f4b</link>
      <guid>https://dev.to/gonzalo_lpez_18346c27391/laravel-backup-como-hacer-copias-de-seguridad-4f4b</guid>
      <description>&lt;h1&gt;
  
  
  Laravel Backup: cómo hacer copIAs de seguridad
&lt;/h1&gt;

&lt;p&gt;Laravel Backup es un paquete creado por Spatie, es uno de los equipos que más paquetes libera para Laravel) que sirve para hacer backups completos de una aplicación Laravel de forma muy sencilla. Características principales Crea un archivo .zip que incluye: Todos los archivos de las carpetas que tú configures (por ejemplo: storage/app, public, etc.). Una copia de la base de datos soporta MySQL, PostgreSQL, SQLite, MongoDB... Se pueden guardar ese zip automáticamente en cualquier disco configurado en Laravel: Local S3 (AWS) Google Cloud Storage Dropbox FTP etc. Comandos Artisan muy simples:bash php artisan backup:run Puedes programarlo fácilmente en el scheduler de Laravel para que se ejecute diariamente / semanalmente. Notificaciones (Slack, Discord, mail…) si falla el backup. Limpieza automática de backups antiguos. Instalación Para instalarlo hay que ejecutar el comando: composer require spatie/laravel-backup Publica el archivo de configuración. php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider" --tag=backup-config Esto crea "config/backup.php" donde se puede personalizar casi todo. Abrir "config/backup.php" y editar las partes clave: return [ 'backup' =&amp;gt; [ // Nombre del backup (aparece en el .zip) 'name' =&amp;gt; env('APP_NAME', 'mi-proyecto'), 'source' =&amp;gt; [ 'files' =&amp;gt; [ 'include' =&amp;gt; [ base_path(), // todo el proyecto (cuidado con node_modules/vendor si es grande) // O más selectivo y recomendado: // storage_path('app'), public_path(), base_path('resources/views'), // etc. ], 'exclude' =&amp;gt; [ base_path('vendor'), base_path('node_modules'), base_path('.git'), storage_path('logs'), // ... ], ], 'databases' =&amp;gt; [ 'mysql',// nombre de la conexión en config/database.php // 'pgsql', etc. si tienes varias ], ], 'destination' =&amp;gt; [ 'disks' =&amp;gt; [ 'local',// por defecto guarda en storage/app/backup-temp/ // 's3',// descomenta si usas AWS S3 ], ], // Cuántos backups mantener (limpieza automática) 'cleanup' =&amp;gt; [ 'strategy' =&amp;gt; \Spatie\Backup\Tasks\Cleanup\Strategies\DefaultStrategy::class, 'default' =&amp;gt; [ 'keep_all_backups_for_days' =&amp;gt; 7, 'keep_daily_backups_for_days' =&amp;gt; 30, 'keep_monthly_backups_for_months' =&amp;gt; 12, 'keep_weekly_backups_for_weeks' =&amp;gt; 52, 'delete_oldest_backups_when_using_more_than_mb' =&amp;gt; 5000, // ~5GB ], ], ], // Notificaciones (opcional pero muy útil) 'notifications' =&amp;gt; [ 'notifiable' =&amp;gt; \Spatie\Backup\Notifications\Notifiable::class, 'channels' =&amp;gt; [ 'mail' =&amp;gt; ['&lt;a href="mailto:admin@tuempresa.com"&gt;admin@tuempresa.com&lt;/a&gt;'], // 'slack' =&amp;gt; '&lt;a href="https://hooks.slack.com/.." rel="noopener noreferrer"&gt;https://hooks.slack.com/..&lt;/a&gt;.', ], ], ]; Ejemplos Hacer un backup completo ahora mismo (archivos + DB): php artisan backup:run Solo la base de datos: php artisan backup:run --only-db Solo archivos: php artisan backup:run --only-files Guardar solo en un disco específico (ej: S3): php artisan backup:run --only-to-disk=s3 Limpiar backups antiguos manualmente: php artisan backup:clean Listar backups existentes: php artisan backup:list Programar backups automáticos: Editar el fichero "app/Console/Kernel.php" y añadir en el método "schedule()": use Illuminate\Support\Facades\Schedule; protected function schedule(Schedule $schedule): void { // Backup completo cada día a las 2:00 AM $schedule-&amp;gt;command('backup:run') -&amp;gt;dailyAt('02:00') -&amp;gt;timezone('America/Mexico_City') // o tu zona -&amp;gt;onOneServer()// evita duplicados en clúster -&amp;gt;emailOnFailure('&lt;a href="mailto:soporte@tuempresa.com"&gt;soporte@tuempresa.com&lt;/a&gt;'); // Opcional: solo DB cada 6 horas (más frecuente y liviano) $schedule-&amp;gt;command('backup:run --only-db') -&amp;gt;everySixHours() -&amp;gt;onOneServer(); } No hay que olvidar tener el cron del scheduler de Laravel corriendo:* * * * * cd /path-to-your-project &amp;amp;&amp;amp; php artisan schedule:run &amp;gt;&amp;gt; /dev/null 2&amp;gt;&amp;amp;1 Ejemplo con S3 Configura el disco en "config/filesystems.php": 's3' =&amp;gt; [ 'driver' =&amp;gt; 's3', 'key' =&amp;gt; env('AWS_ACCESS_KEY_ID'), 'secret' =&amp;gt; env('AWS_SECRET_ACCESS_KEY'), 'region' =&amp;gt; env('AWS_DEFAULT_REGION', 'us-east-1'), 'bucket' =&amp;gt; env('AWS_BUCKET'), 'url' =&amp;gt; env('AWS_URL'), 'endpoint' =&amp;gt; env('AWS_ENDPOINT'), 'use_path_style_endpoint' =&amp;gt; env('AWS_USE_PATH_STYLE_ENDPOINT', false), 'throw' =&amp;gt; false, ], En .env: AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET=backups-mi-proyecto Añadir 's3' al array de disks en "config/backup.php": //Solo se muestra la parte que interesa editar del fichero config/backup.php return [ 'backup' =&amp;gt; [ // Nombre del backup (aparece en el .zip) 'name' =&amp;gt; env('APP_NAME', 'mi-proyecto'), 'destination' =&amp;gt; [ 'disks' =&amp;gt; [ 'local',// por defecto guarda en storage/app/backup-temp/ 's3',// descomenta si usas AWS S3 ], ], ], ]; &lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>spanish</category>
      <category>programacion</category>
    </item>
    <item>
      <title>¿Qué son las Migraciones en Laravel y cómo usarlas?</title>
      <dc:creator>Gonzalo López</dc:creator>
      <pubDate>Mon, 19 Oct 2026 13:19:38 +0000</pubDate>
      <link>https://dev.to/gonzalo_lpez_18346c27391/que-son-las-migraciones-en-laravel-y-como-usarlas-5p8</link>
      <guid>https://dev.to/gonzalo_lpez_18346c27391/que-son-las-migraciones-en-laravel-y-como-usarlas-5p8</guid>
      <description>&lt;h1&gt;
  
  
  ¿Qué son las Migraciones en Laravel y cómo usarlas?
&lt;/h1&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>spanish</category>
      <category>programacion</category>
    </item>
  </channel>
</rss>
