mercoledì 18 dicembre 2024

PHP - Massima dimensione di POST e UPLOAD

Lo sviluppo per il web in PHP prevede l'invio ed il processo di informazioni tra client e server. In alcuni casi, è necessario inviare dei file al server (per il salvataggio, il processo, etc); il web server che utilizza PHP va quindi impostato per garantire che i file rispettino le dimensioni massime consentite.

La modifica va applicata su php.ini e riguarda i seguenti due elementi di configurazione:

  • post_max_size
  • upload_max_filesize

Il primo (post_max_size) definisce il peso massimo della chiamata POST, comprensiva del contenuto della form, degli header inviati e di tutti i file caricati.

Il secondo elemento (upload_max_filesize) definisce il peso massimo dei singoli file caricati.

In PHP è possibile controllare quanto vale ogni singolo elemento di configurazione; per farlo, bisogna inserire il seguente comando nello scritpt:

ini_get('post_max_size')

e:

ini_get('upload_max_filesize')

Questo produrrà una stringa con la dimensione massima "con unità", ad esempio "5M".

Per gestire eventuali errori, è possibile utilizzare una funzione che converta il valore di "post_max_size" e di "upload_max_filesize" in bytes e poi confrontare il dato con il peso del POST in arrivo.

In pratica:

function convertToBytes($from)
{
    $units = ['B', 'K', 'M', 'G', 'T', 'P'];
    $number = substr($from, 0, -1);
    $suffix = strtoupper(substr($from,-1));

    // B or no suffix
    if(is_numeric(substr($suffix, 0, 1)))
    {
        return preg_replace('/[^\d]/', '', $from);
    }

    $exponent = array_flip($units)[$suffix] != null ? array_flip($units)[$suffix] : null;

    if ($exponent === null)
    {
        return null;
    }

    return $number * (1024 ** $exponent);
} // convert_to_bytes

if (isset($_SERVER['CONTENT_LENGTH']) && (int) $_SERVER['CONTENT_LENGTH'] > convertToBytes(ini_get('post_max_size')))
{
    echo "errore!";
}

Windows 11 - Ripristinare il context menu "classico"

Il nuovo context menu di Windows 11 ha una grafica più moderna ed è più snello, ma non presenta tutte le voci presenti in quello "classico".

Il più delle volte, cercare una funzione implica cliccare su "più opzioni" e poi utilizzare quello vecchio o cercare visivamente dove è finita la funzionalità da utilizzare.
E' decisamente una rottura.

Per fortuna è possibile ripristinare come default il menu contestuale classico modificando il registro di sistema.

Per farlo, basta aprire un prompt da amministratore e lanciare questo comando:

REG.EXE add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve

Una volta fatto, bisogna aprire il task manager e riavviare il processo explorer.exe per ricaricare la nuova configurazione.

Nota:
nel caso di un PC a dominio, bisogna lanciare il comando da un terminale "non amministrativo", perché sennò il menu classico apparirà solo ad administrator!

giovedì 12 dicembre 2024

POWERSHELL - Utilizzo delle ArrayList

 Gli array in powershell hanno un grosso "problema", se devono essere utilizzati per delle elaborazioni: una volta definiti, hanno una dimensione fissa.

$array = @('1', '2')

E' possibile aggiungere elementi, ma il sistema in realtà crea un "nuovo array" e ci carica dentro tutti gli elementi del primo e quelli nuovi che si intende aggiungere.
Questo è decisamente dispendioso in termini di tempo e di risorse.

Se invece si vuole lavorare con una struttura più "dinamica", bisogna utilizzare i System.Collections.ArrayList.

L'ArrayList viene definito in questo modo:

$array = new-object System.Collections.ArrayList
E' possibile accedere ai suoi elementi utilizzando la solita convenzione per gli array (indicando l'index tra parentesi quadre):
for ($i = 0; $i -lt $array.Count; $i++)
{
    $el = $array[$i]
    [...]
}
E' possibile inoltre aggiungere degli elementi senza rigenerare l'array:
$array.Add("dato") | Out-Null
Nota: in questo caso, i richiami ad "Add" (o "Remove") restituiscono in output il numero di righe processate, quindi è necessario passare l'output a "null" (come nell'esempio qui sopra).

E' possibile inoltre trasformare l'array in una stringa singola usando un separatore:
$msg = $array -join " "
E' possibile contare gli elementi al suo interno:
$count = $array.Count
Da notare che l'associazione di un'ArrayList ad un'altra variabile avviene "per riferimento" e non "per valore", per cui un eventuale richiamo a .Clear() elimina i dati da entrambi! (che poi... è lo stesso elemento).

POWERSHELL - Richiamare il garbage collector

Per alcuni script che chiedono parecchie risorse (ad esempio, quando ci sono numerose iterazioni con tanti dati caricati in memoria e poi processati), i dati contenuti in variabili "temporanee" diventano obsoleti ma continuano a rimanere in RAM.

E' possibile richiamare il garbage collector direttamente dal codice per fare un po' di pulizia.

Questo è il comando da richiamare:

[System.GC]::Collect()

lunedì 25 novembre 2024

Windows - Controllare il funzionamento di LDAP

 Per controllare il funzionamento di LDAP (quindi l'autenticazione tramite Active Directory - di solito utilizzata in servizi "esterni"), bisogna connettersi al server in questione (o ad uno qualsiasi che gestisca LDAP - quindi un Domain Controller), cliccare su Start e cercare il seguente programma:

ldp.exe

A quel punto, cliccare su "Connection" e quindi su "Connect...", indicare il nome del server e cliccare su OK.

Il programma effettuerà un tentativo di connessione e riporterà il risultato.

giovedì 30 maggio 2024

Excel - Cella con selezione da menu a discesa

Per creare un elenco a discesa all'interno di una cella excel, bisogna:

  1. riempire una tabella con i valori voluti (ad esempio, su un foglio a parte)
  2. selezionare la cella desiderata
  3. cliccare su Dati e poi su Convalida Dati > Convalida Dati...
  4. su Impostazioni, selezionare Consenti: Elenco
  5. impostare l'origine selezionando la tabella con i valori desiderati (vedi punto 1)
  6. cliccare OK

venerdì 24 maggio 2024

Linux - ACL e gestione di permessi aggiuntivi per utenti e gruppi

Oltre ai permessi RWX per owner / group / other, ci possono essere delle necessità ulteriori. In questo caso, entrano in gioco le ACL (Access Control List), che forniscono permessi aggiuntivi (più stringenti o più permissivi) ai file ed alle directory.

Sono ad esempio utili per delle directory utilizzate da un programma (ad esempio, apache) che devono poter essere condivise con samba e quindi consultate (e soprattutto scritte) da specifici utenti loggati tramite Active Directory.

I due comandi fondamentali sono:

  • getfacl
  • setfacl


Il comando per elencare tutti i permessi "base" più quelli gestiti dalle ACL è:

# getfacl /path


Mentre il comando per rimuovere TUTTI i permessi delle ACL (mantenendo inalterato il rwx per owner/group/other) è:

# setfacl -Rb /path

Nota: la R serve per la ricorsione.

Linux - Comandi per gestire la connessione ad Active Directory

Questi sono alcuni comandi per creare, gestire e controllare la connessione ad Active Directory, in modo da utilizzarlo nei permessi dei condivisioni SMB.

Questo comando serve a controllare l'accesso al domain controller:

# ldapsearch -x -h [IP] -p 389 -D "[UTENTE]@[DOMINIO].LOCAL" -W -b "dc=[DOMINIO],dc=local" cn

Nota: richiede la password di dominio dell'utente.


Controlla che il JOIN al dominio funzioni:

# net ads testjoin


Lista tutti i domini collegati:

# realm list


Controlla e presenta la lista dei domini attualmente collegati:

# realm discover [DOMINIO].LOCAL


Abbandona un dominio:

# realm leave [DOMINIO].LOCAL


Collega un dominio:

# realm join --user=Administrator [DOMINIO].LOCAL


File di configurazione dell'accesso a Kerberos (usato da winbind):

# nano /etc/krb5.conf


Info sui domini:

# net ads info -d 3


Join con WINBIND:

# net ads join -U administrator@[DOMINIO].LOCAL
# net ads join -D 5 -S [IP] -U administrator


Tenta di effettuare la login sul dominio con l'utente indicato:

# kinit administrator@[DOMINIO].LOCAL

Nota: se ha successo, no restituisce nulla. Se fallisce, avvisa.


Lista gli utenti che si sono autenticati ed hanno un "lease" (ovviamente se si è connessi al reame):

# klist

Nota: dovrebbe esserci administrator, se il comando precedente ha avuto successo


Controlla com'è la configurazione e quali sono i parametri di SMB:

# testparm -s


Test connessione a SMB:

# smbclient -L [IP] -U [DOMINIO]/[UTENTE]

venerdì 17 maggio 2024

Linux - Gestione dei permessi

Per capire quali sono i permessi di base, si usa il solito:

# ll /directory


Alcune righe potrebbero avere un "+" alla fine dei permessi. Se c'è, vuol dire che è attiva la ACL.

Per capire quali ACL sono attive, si usa il seguente comando:

# getfacl /directory


Per eliminare i permessi ACL (non servono nella gestione samba + A.D.), si usa il seguente comando:

# setfacl -Rb /directory


Per quanto riguarda i permessi corretti, si parte dall'owner:

# chown -R apache:apache /directory


I permessi corretti sono:

  • per i file, 664
  • per le directory, 775


Si possono impostare direttamente con:

# chmod 664 "file"
# chmod 775 "directory"


Oppure si possono sistemare con (ovviamente indicando i permessi corretti):

# chmod ugo+rwx /path


Un'altra cosa che si può fare per rendere la gestione dei permessi più veloce è usare find. Questi sono i comandi per cambiare, rispettivamente, file e directory con recursione:

# find /path/ -type f -exec chmod 664 {} +
# find /path/ -type d -exec chmod 775 {} +

Se non si vuole usa la ricorsione, bisogna usare questo parametro:

-maxdepth 1

mercoledì 28 febbraio 2024

PHP e SQL Server - Gestione formato datetime dei CONVERT

Utilizzando una connessione ad un DB SQL Server da PHP (tramite PDO), c'è il problema del formato delle date.

Di default, il sistema considera il formato "americano" (mese/giorno/anno), mentre spesso la gestione che si vuole è quella "italiana" (giorno/mese/anno).
Questo può portare a parecchi problemi.

Come fare per risolverlo?

Se si usa il PDO, la soluzione è effettuare, come prima chiamata dopo l'inizializzazione della classe che gestisce la connessione, della seguente query:

SET DATEFORMAT dmy

Questo imposta il formato corretto delle date e, quindi, per le successive query la costruzione dei "CONVERT(DATETIME, [...])" viene eseguita correttamente.

L'alternativa è, ovviamente, "girare" tutte le costruzioni delle date in formato stringa. Per farlo, bisogna seguire questa formattazione:

anno / mese / giorno

(unico problema: questo funziona nella connessione "di default", ma la stessa query eseguita su Management Studio -in italiano- darà errore)

venerdì 9 febbraio 2024

WordPress - Uso di script jQuery

WordPress gestisce nativamente jQuery, ma le ultime versioni hanno un sistema per evitare i conflitti, per cui il richiamo a jQuery fatto tramite il carattere $ non funziona: la pagina restituisce un errore "$ is not a function".

La soluzione è utilizzare "jQuery" al posto di "$" negli script.

lunedì 8 gennaio 2024

EXCHANGE 365 - Abilitazione inoltro automatico

L'inoltro automatico delle mail per le caselle di posta presenti in Exchange 365 è bloccato di default.

Bisogna quindi configurare l'antispam per permettere l'attività di inoltro.

Questa è la guida passo-passo:

  1. Si entra nel portale della sicurezza (security.microsoft.com)
  2. Si clicca su "Criteri e regole" nel menu a sinistra
  3. Si clicca su "Criteri per minaccia"
  4. Si clicca su "Filtro della posta indesiderata"
  5. Si clicca su "Crea Criterio" > "Outbound"
  6. Si compilano i campi (nome > utenze)
  7. Si imposta la voce "Attivo - L'inoltro è abilitato" su "Regole di inoltro automatico"
  8. Si salva

Questa è l'articolo che spiega i passaggi (in inglese):