venerdì 8 dicembre 2017

Can you store password in Putty sessions?

The short answer is no. But you have a workaround that can help you to reach the same result: a one-click Putty shortcut to your server from your desktop.
That's the issue of this article.

Here is how to do:

  1. Create on the desktop a shortcut to Putty.exe
  2. Right click on the shortcut, select "properties" and edit the target attribute
  3. Change
    "C:\ProgramFiles\putty.exe"
    in
    "C:\ProgramFiles\putty.exe" root@207.150.12.233 -pw YourPassword
    where
    "C:\ProgramFiles\putty.exe" is the correct path of your putty.exe file
    "root" to the user you would use to login to your remote server
    "207.150.12.233" is the remote server IP
    "YourPassword" is the correct password.
  4. Click "Apply" then "OK" to commit the change.

Now simply double-click on your new shortcut and you'll be logged on your server.

domenica 26 novembre 2017

Eloquent collections methods

The Eloquent ORM provides a beautiful, simple ActiveRecord implementation for working with your database.
The results of Eloquent queries are always returned as Collection instances and Eloquent has a list of methods to work with Collections.

Here it is an interesting article about 10 less-known Eloquent collections methods:
avg()
chunk()
contains()
every()
filter()
forget()
implode()
keyBy()
map()
plunk()

Howto preview sql query code generated in Eloquent

The simplest method to show the query generated by Eloquent is by utilizing a ->toSql() method.
We only need to replace the closing ->get() with ->toSql() and then print out the results with dd() or die() funnction.

Here is an example:

    
    $users = DB::table('users')
        ->where('email', 'x@y.xxx')
        ->where('is_active', true)
        ->toSql();
//        ->get();
    dd($users);

This is the output:

"select * from `users` where `name` = ? and `is_active` = ?"

A little more complex and complete way is to enable and use the QueryLog method.

Here the example:

    DB::enableQueryLog();
    $users = DB::table('users')
    ->where('email', 'x@y.xxx')
    ->get();

    dd(DB::getQueryLog());

This is the output:

array:1 [
  0 => array:3 [
    "query" => "select * from `users` where `email` = ?"
    "bindings" => array:1 [
      0 => "x@y.xxx"
    ]
    "time" => 61.13
  ]
]

domenica 12 novembre 2017

Linux commands and tools for networking and sysadmin

I 20 comandi indispensabili per un amministratore di sistema.
20 Linux commands every sysadmin should know

Comandi e tools linux interessanti per il networking.
https://itsubuntu.com/linux-networking-commands-and-scripts/

lunedì 17 luglio 2017

Ricerca in VIM

Comandi per ricercare una stringa in un file con l'editor VIM:

/ + ENTER

Per passare all'occorrenza successiva premere "n"
Per passare all'occorrenza precedente premere "N"

venerdì 30 giugno 2017

Aumentare la dimensione massima di file caricabili sul server in post

Occorre intervenire su sulla configurazione di PHP e sul web server.
Ipotizziamo di utilizzare un macchina Ubuntu 16.04 con PHP 7.0 e web server nginx.
Per quanto riguarda php occorre modificare nel file php.ini i valori dei parametri

upload_max_filesize
post_max_size

Per quanto riguarda il server web, ipotizzando di utilizzare nginx,

  • in caso di modifica per tutto il server occorre modificare il file nginx.conf inserendo il valore client_max_body_size nel blocco http
  • in caso di modifica per un solo dominio occorre modificare il file di configurazione del dominio (/etc/nginx/sites-avalible/.conf) inserendo la stesso stringa nel blocco server

In caso di file di dimensioni particolarmente elevate occorre intervenire anche sul tempo massimo di durata dello script sia in PHP che in nginx

Finite le modifiche ricordarsi di riavviare PHP e nginx

sudo service php7.0-fpm restart
sudo service nginx restart

Riferimenti 

  • https://easyengine.io/tutorials/php/increase-file-upload-size-limit/
  • https://easyengine.io/tutorials/php/increase-script-execution-time/

giovedì 1 giugno 2017

Bloccare l'accesso dei BOT al sito


Questa la procedura migliore che ho trovato assemblando varie indicazioni trovate in rete:

1. Rilevare gli user-agent che hanno avuto accesso al server ordinandoli per numerosità di accessi interroganto il file access.log
cat access.log | awk -F\" '{print $6}' | sort | uniq -c | sort -n

2. Inserire degli user-agent dei bot nel file robots.txt con indicazione di blocco:
User-agent:
Disallow: /

3. Inserire la condizione di blocco nel file .htaccess
Condizione per il singolo user-agent:
  RewriteEngine on
  RewriteCond %{HTTP_USER_AGENT} Twitterbot [NC,OR]
  RewriteCond %{HTTP_USER_AGENT} Baiduspider [NC,OR]
  RewriteCond %{HTTP_USER_AGENT} ApacheBench [NC]
  RewriteRule .* - [F,L]

Condizione per più user-agent:
  RewriteCond %{HTTP_USER_AGENT} ^(Twitterbot|Baiduspider|ApacheBench) [NC]
  RewriteRule .* - [F,L]

4. Inserire il blocco dell'ip del bot nel file htaccess
 deny aaa.bbb.ccc.ddd

Per un approccio più esteso considerare di trasferire il sito sotto Cloudflare

Riferimenti
- https://ma.ttias.be/block-user-agent-in-htaccess-for-apache-webserver/
- http://www.blogtips.org/web-crawlers-love-the-good-but-kill-the-bad-and-the-ugly/
- https://support.hypernode.com/knowledgebase/fixing-bad-performance-caused-by-search-engines/

Script time evaluation in PHP

Piccolo promemoria del codice per valutare il tempo di esecuzione di uno script:

Registro l'inizio
$time_start = microtime(true);

Eseguo lo script script
...

Registro la fine
$time_end = microtime(true);

Calcolo la durata
$execution_time = ($time_end - $time_start);          

La stampo
echo 'Total Execution Time: '.$execution_time.' Secs'; //execution time of the cicle in seconds


martedì 30 maggio 2017

Rendere eseguibile ed eseguire un file/script in Linux

Per essere eseguito uno script deve avere i permessi corretti; questi vengono attribuiti attraverso il comando chmod:
chmod +x nomefile.sh

Per la sua esecuzione:
bash: ./nomefile.sh
eventualmente preceduta da sudo o con sh al posto di bash in base al contenuto dello script

giovedì 25 maggio 2017

Hiren's BootCD

In un unico CD o su una chiavetta avviabile una raccolta di programmi potrebbe essere molto utile:
https://www.hiren.info/pages/bootcd

oh-my-zsh shell per linux

Un aiuto per rendere più veloce e piacevole il lavoro di shell non sarebbe male quindi ecco oh-my-zsh.
"Your terminal never felt this good before" recita il sito di riferimento e considerando che, attraveso l'utilizzo dei temi, si può prorio dire che ce n'è per tutti i gusti.

Riferimenti:
- http://ohmyz.sh/
- https://github.com/robbyrussell/oh-my-zsh
- https://github.com/denysdovhan/spaceship-zsh-theme
 - https://www.smashingmagazine.com/2015/07/become-command-line-power-user-oh-my-zsh-z/

BASH: bad interpreter: No such file or directory error

Lanciando uno script bash mi è capitato di ricevere l’errore "bad interpreter: No such file or directory"
In questi casi il problema potrebbe essere dovuto al fatto che il file è stato preparato con gli “a capo” stile windows (\r\n) anzichè stile unix (\n).

La soluzione è semplice: editare con vim e lanciare il comando
:set fileformat=unix

In generale se gli script bash vengono editati su Windows con Notepad++ (come capita a volte a me) conviene ricordare di settare l'editor in modo che il file risulti compatibile con il sistema linux.
Questa la procedura:
- in notepad++ aprire la finestra Configurazione->Preferenze
- nel tab "Nuovo documento" impostare il formato a UNIX

Rimuovere cartelle o file con percorsi o nomi troppo lunghi

Mi è capitato di trovarmi nell'impossibilità di rimuovere una cartella o un file perché il path risulta troppo lungo.

Microsoft stessa offre una serie di indicazioni per il messaggio "impossibile eliminare un file o una cartella"


Nel mio caso il problema è stato rilevato su windows e si è risolto creando una cartella subst.
Questa la procedura:
- Aprire un terminale
- Spostarsi nella cartella che si deve cancellare
- Creare un'associazione drive-lettera con il comando "subst j: ."
- Con "Esplora Risorse" spostarsi sul drive j: ed eliminare cartelle o files con nomi troppo lunghi
- Tornare al terminale e rimuovere l'associazione lettera-drive con il comando "subst /d j:"

Riferimenti:
http://superuser.com/questions/78434/how-to-delete-directories-with-path-names-too-long-for-normal-delete
http://superuser.com/questions/755298/how-to-delete-a-file-with-a-path-too-long-to-be-deleted

Closure and anonymous functions in PHP

An easy explanation about Closure and anonimous functions in PHP


Creare un file con il nome che inizia con il carattere "." in windows

In Windows non è possibile attribuire qualsiasi nome a file e, in alcuni casi, occorre utilizzare accorgimenti particolari.
Per esempio per attribuire ad un file un nome che inizia con il punto i sono diversi modi; il metodo più veloce è quello di aggiungere il punto anche alla fine del nome del file.

Esempio:
Se vogliamo nominare un file ".env" dobbiamo inserire il nome ".env."

giovedì 18 maggio 2017

A little help to discover vulnerabilities in your apps

Ogni giorno vengono individuate nuove vulnerabilità e mantenere sicuro il codice esposto alla rete non è cosa semplice.
Un semplice aiuto lo offre Sensiorlabs con Security Advisories Checker che, tramite l'analisi del composer.lock, controlla se le librerie utilizzate tramite composer sono affidabili e aggiornate.

martedì 7 febbraio 2017

Impostare encoding utf8 in Netbeans IDE

Aprendo un vecchio file PHP con Netbeans mi sono accorto che conteneva caratteri strani che non figuravano tali con altri editor.

Il problema era dovuto al fatto che il mio Netbeans non era configurato con encoding UTF8 e quindi non interpretava correttamente quei caratteri.

La soluzione ha richiesto di modificare l'encoding di default di NetBeans e di cambiare quella del progetto.

Modificare l'encoding di default di NetBeans

  1. aprire il file netbeans.conf nella cartella etc dell'installazione del programma (in windows: c:\programmi\NetBeans 8.2\)
  2. aggiungere la stringa "-J-Dfile.encoding=UTF-8" alla variabile "netbeans_default_options"
  3. riavviare NetBeans
  4. verificare che ora l'encoding di default sia UTF-8 nella voce "about" del menu "help"
    (System: Windows 8 version 6.2 running on amd64; UTF-8; it_IT (nb) )
Cambiare l'encoding del progetto

  1. aprire la finestra "proprietà" del progetto in oggetto
  2. nella scheda source scegliere come encoding UTF-8

giovedì 19 gennaio 2017

Riprendere la modalità interattiva dopo Ctrl-Z

Con questo post voglio ricordare una "simpatica" esperienza con la consolle di Linux.
Durante il normale utilizzo di VIM per la modifica di uno script ho per errore premuto Ctrl-Z e il risutato è che sono tornato alla shell con il timore di aver perso tutto ciò che avevo appena digitato.

Panico :-0

E così che ho scoperto il comando "fg" che consente di recuperare la modalità interattiva.

fg [jobspec] : Resume jobspec in the foreground, and make it the current job. If jobspec is not present, the shell’s notion of the current job is used. The return value is that of the command placed into the foreground, or failure if run when job control is disabled or, when run with job control enabled, if jobspec does not specify a valid job or jobspec specifies a job that was started without job control.