Caputo's blog

Informatica, tecnologia, programmazione, fai da te, papercraft e papertoy

25 errori di sicurezza durante lo sviluppo

febbraio 18th, 2010 by Giovanni Caputo

CWE

Sul sito di CWE sono stati elencati i 25 errori più comuni e pericolosi che vengono effettutati durante lo sviluppo di un’applicazione, rendendola poco sicura.

Potrete scaricare il fie: pdf

Rank Score ID Name
[1] 346 CWE-79 Failure to Preserve Web Page Structure (‘Cross-site Scripting’)
[2] 330 CWE-89 Improper Sanitization of Special Elements used in an SQL Command (‘SQL Injection’)
[3] 273 CWE-120 Buffer Copy without Checking Size of Input (‘Classic Buffer Overflow’)
[4] 261 CWE-352 Cross-Site Request Forgery (CSRF)
[5] 219 CWE-285 Improper Access Control (Authorization)
[6] 202 CWE-807 Reliance on Untrusted Inputs in a Security Decision
[7] 197 CWE-22 Improper Limitation of a Pathname to a Restricted Directory (‘Path Traversal’)
[8] 194 CWE-434 Unrestricted Upload of File with Dangerous Type
[9] 188 CWE-78 Improper Sanitization of Special Elements used in an OS Command (‘OS Command Injection’)
[10] 188 CWE-311 Missing Encryption of Sensitive Data
[11] 176 CWE-798 Use of Hard-coded Credentials
[12] 158 CWE-805 Buffer Access with Incorrect Length Value
[13] 157 CWE-98 Improper Control of Filename for Include/Require Statement in PHP Program (‘PHP File Inclusion’)
[14] 156 CWE-129 Improper Validation of Array Index
[15] 155 CWE-754 Improper Check for Unusual or Exceptional Conditions
[16] 154 CWE-209 Information Exposure Through an Error Message
[17] 154 CWE-190 Integer Overflow or Wraparound
[18] 153 CWE-131 Incorrect Calculation of Buffer Size
[19] 147 CWE-306 Missing Authentication for Critical Function
[20] 146 CWE-494 Download of Code Without Integrity Check
[21] 145 CWE-732 Incorrect Permission Assignment for Critical Resource
[22] 145 CWE-770 Allocation of Resources Without Limits or Throttling
[23] 142 CWE-601 URL Redirection to Untrusted Site (‘Open Redirect’)
[24] 141 CWE-327 Use of a Broken or Risky Cryptographic Algorithm
[25] 138 CWE-362 Race Condition

Category: Programmazione, Siti Web, Tecnologia | No Comments »

Come realizzare una lista eventi in WordPress senza plugin

gennaio 20th, 2010 by Giovanni Caputo

Per realizzare un lista eventi in WordPress senza utilizzare un plug-in specifico,  potete seguire il tutorial:

How To Make a WordPress Events List

Sidebar Events List

Events Custom Field

Category: Siti Web, tutorial | 1 Comment »

Thunbnail in WordPress 2.9

gennaio 20th, 2010 by Giovanni Caputo

the_post_thumbnail è una delle nuove funzionalità di WordPress 2.9.

Per capire in dettaglio come utilizzare questa funzionalità potete utilizzare il tutorial di Justin TadlockEverything you need to know about WordPress 2.9’s post image feature“.

Category: Programmazione, Siti Web, Tecnologia, tutorial | No Comments »

Upload di più file in PHP [Multiple file PHP]

gennaio 19th, 2010 by Giovanni Caputo

Ciao a tutti,

oggi vi propongo come realizzare l’upload di più file in PHP.

Prima di tutto mi sono servito di una libreria javascript che fornisce una interfaccia molto semplice per aggiungere nuovi file ed eventualmente eliminare i file da uploadare.

La libreria è

jQuery Multiple File Upload Plugin

Vediamo in dettaglio come realizzare:

Prima di tutto creamo una form in un nuovo file .html

<html>

<head>
<script src="jquery-latest.js" type="text/javascript" language="javascript"></script>
<script src="jquery.MultiFile.js" type="text/javascript" language="javascript"></script>
</head>

<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Foto:</label>
<input type="file" accept="gif|jpg" maxlength="3" name="file[]"/>
<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>

In particolare vengono aggiungi 2 script js scaricabili dal seguente link: LINK

Ssuccessivamente viene definito un normale form con method=”post” ed enctype=”multipart/form-data, e un campo file <input type=”file” accept=”gif|jpg” maxlength=”3″ name=”file[]”/>. Questo codice può essere personalizzato per modificare il tipo di file permessi, il numero di file da uploadre etcc… Per maggiori informazioni vedere gli esempi nel tab example della libreria javascipt precedentemente descritta.

Il risultato di questa form permette al server di ottenere nella variabile $_FILES un vettore contentente i file.

C’è però un piccolo problema, inquanto, il vettore di file non salvato come logicamente potremmo pensare:

array(
  [0] => array(
    'name' => 'file1.txt',
    'tmp_name' => '/tmp/abcdef'
    ....
  ),
  [1] => array(
    'name' => 'file2.txt',
    'tmp_name' => '/tmp/ghijkl'
    ....
  )
);

invece ha una struttra del tipo:

array(
  'name' => array(
    [0] => 'file1.txt',
    [1] => 'file2.txt'
  ),
  'tmp_name' => array(
    [0] => '/tmp/abcdef',
    [1] => '/tmp/ghijkl'
  ),
  ...
);

Quindi abbiami bisogno di una funzione che permetta questo tipo di conversione.
Di seguito il file php (upload_file.php) che permette appunto di convertire, e salvare i file in una cartella upload.

<?php
$files=$_FILES["file"];

$files=array();
$fdata=$_FILES['file'];
if(is_array($fdata['name'])){
 for($i=0;$i<count($fdata['name']);++$i){
 $files[]=array(
 'name'    =>$fdata['name'][$i],
 'tmp_name'=>$fdata['tmp_name'][$i],
 'type' => $fdata['type'][$i],
 'size' => $fdata['size'][$i],
 'error' => $fdata['error'][$i],
 
 );
 }
}
else $files[]=$fdata;

foreach($files as $file){

 salva($file);

}




function salva($file){

if ((($file["type"] == "image/gif")
|| ($file["type"] == "image/jpeg")
|| ($file["type"] == "image/pjpeg"))
&& ($file["size"] < 20000))
 {
 if ($file["error"] > 0)
 {
 echo "Return Code: " . $file["error"] . "<br />";
 }
 else
 {
 echo "Upload: " . $file["name"] . "<br />";
 echo "Type: " . $file["type"] . "<br />";
 echo "Size: " . ($file["size"] / 1024) . " Kb<br />";
 echo "Temp file: " . $file["tmp_name"] . "<br />";

 if (file_exists("upload/" . $file["name"]))
 {
 echo $file["name"] . " already exists. ";
 }
 else
 {
 move_uploaded_file($file["tmp_name"],
 "upload/" . $file["name"]);
 echo "Stored in: " . "upload/" . $file["name"];
 }
 }
 }
else
 {
 echo "Invalid file";
 }
}
?>

Category: Programmazione, Siti Web, Tecnologia | No Comments »

Convertire un testo in immagine in PHP

gennaio 14th, 2010 by Giovanni Caputo

Vediamo come trasformare il testo in immagine con PHP.

< ?php

  // header dell'immagine
  header("Content-type: image/jpg");

  // indirizzo email
  $string = "tuaemail@dominio.com";

  // impostazioni generali
  $font  = 4;
  $width  = ImageFontWidth($font) * strlen($string);
  $height = ImageFontHeight($font);

  // creazione immagine
  $im = @imagecreatetruecolor ($width,$height);

  //sfondo bianco
  $background_color = imagecolorallocate ($im, 255, 255, 255);

  //testo nero
  $text_color = imagecolorallocate ($im, 0, 0, 0);

  // conversione del testo in immagine
  imagestring ($im, $font, 0, 0,  $string, $text_color);

  // visualizzazione
  imagejpeg ($im);
?>

Fonte: http://www.sastgroup.com

Category: Programmazione, Tecnologia, tutorial | No Comments »

Utilizzare cURL in php

gennaio 9th, 2010 by Giovanni Caputo

Volevo proporre un link dove ci sono vari utilizzi delle funzione cURL di PHP:

http://net.tutsplus.com

Category: Programmazione | No Comments »

Rimuovere menu di amministrazione di WordPress dalla Dashboard

gennaio 4th, 2010 by Giovanni Caputo

wordpress logo

Semplicemente incollando il codice seguente nel file functions.php. Il seguente codice di esempio rimuove tutte le voci del menu di amministrazione che sono contenute nell’array $restricted.

function remove_menus () {
global $menu;
	$restricted = array(__('Dashboard'), __('Posts'), __('Media'), __('Links'), __('Pages'), __('Appearance'), __('Tools'), __('Users'), __('Settings'), __('Comments'), __('Plugins'));
	end ($menu);
	while (prev($menu)){
		$value = explode(' ',$menu[key($menu)][0]);
		if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);}
	}
}
add_action('admin_menu', 'remove_menus');

Category: Programmazione, programmi | No Comments »

Creare un plugin per WordPress con NetBeans IDE

dicembre 23rd, 2009 by Giovanni Caputo

Ciao a tutti,

finalmente ho trovato un editor che permetti di sviluppare un plugin per wordpress.

Netbens è utilissimo per sviluppare e per effettuare il debug di un plugin per WordPress.

Vediamo in dettaglio:

  • Scaricare Wordpre da www.wordpress.org oppure da www.Inwordpress-it.it
  • Installare NetBeans IDE per PHP
  • Configurare il Web Server e PHP in NetBeans
  • Configurare MySQL in Netbeans e creare un nuovo database
  • Creare un nuovo progetto Netbeans Image:new-php-project-step-0_ConfiguringNetBeansProjectForWordPress.png
  • Inserire come directory source la cartella dove si è estratto WordPress
  • Inserire come nome progetto WordPress
  • Far salvare i metadati in una directory differente:}}center Image:new-php-project-step-1_ConfiguringNetBeansProjectForWordPress.png
  • Inserire Run As Local Web Site nelle RUN Configuration
  • Inserire l’url da aprire (http://localhost/blog/).
  • Spuntare la casella che permetti di pubblicare direttamente i dati sul server}center Image:new-php-project-step-2_ConfiguringNetBeansProjectForWordPress.png
  • Completare l’installazione di WordPress configurando il file wp-config.php

Di seguito un video che mostra i vari passi di sviluppo e debug:

Category: Programmazione, Siti Web, Tecnologia | No Comments »

Determinare se il sito è stato aperto con un dispositovo mobile

dicembre 14th, 2009 by Giovanni Caputo

Questo metodo può essere utilizzato sia su un normale sito statico che con un sito realizzato con WordPress.

Per prima cosa è necessario scaricare una piccola libreria: detectmobilebrowsers.mobi e pubblicarlasul proprio sito. Mentre se si utilizza WordPress pubblicarla nella direcotory.

A questo punto inserire, il seguente codice, nella propria pagina, se si tratta di wordpress,invece, nella header.php:

include('mobile_device_detect.php');
$mobile = mobile_device_detect();

if ($mobile==true) {
  header( 'Location: http://your-website.com/?theme=Your_Mobile_Theme' ) ;
}

Category: Programmazione | No Comments »

Richieste Soap a un web service con GWT

dicembre 12th, 2009 by Giovanni Caputo

Ciao a tutti, in questi giorni, durante l’utilizzo di GWT, avevo la necessità di effettuare richieste SOAP a un semplice web service da me realizzato.

Per semplicità fornisco il codice di due metodi del web service da me realizzato.

Metodo CIAO:

/**
* Web service operation
*/
@WebMethod(operationName = “CIAO”)
public String CIAO() {
return “CIAO”;
}

Metodo  executeM5Primo

/**
* Web service operation
*/
@WebMethod(operationName = “executeM5Primo”)
public String executeM5Primo(@WebParam(name = “stringfile”)
String stringfile, @WebParam(name = “filetype”)
String filetype, @WebParam(name = “options”)
java.lang.String[] options) throws IOException, Exception {

String xml=””;
//altro codice….

return  xml;

}

Vediamo adesso come effettuare effettivamente la richiesta al web service tramite GWT:

request(){

String  url=”http://localhost:8080/WS_DataMining/DataMiningServices”;
RequestBuilder rb;

RequestBuilder rb= new RequestBuilder(RequestBuilder.POST, url);
rb.setHeader(“SOAPAction”, “\”\””);
rb.setHeader(“Content-Type”, “text/xml”);

/*dati di richiesta per un metodo con prototipo
String CIAO()
*
* <?xml version=”1.0″?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:SOAP-ENC=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
<SOAP-ENV:Body>
<jsx1:CIAO xmlns:jsx1=”http://dataMiningWS/”/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
*
*/

String data=“<?xml version=\”1.0\”?><SOAP-ENV:Envelope xmlns:SOAP-ENV=\”http://schemas.xmlsoap.org/soap/envelope/\” xmlns:SOAP-ENC=\”http://schemas.xmlsoap.org/soap/encoding/\” xmlns:xsi=\”http://www.w3.org/2001/XMLSchema-instance\” xmlns:xsd=\”http://www.w3.org/2001/XMLSchema\”> <SOAP-ENV:Body><jsx1:CIAO xmlns:jsx1=\”http://dataMiningWS/\”/></SOAP-ENV:Body></SOAP-ENV:Envelope>“;
try {

rb.sendRequest(data, new CiaoResultHandler());

} catch (RequestException ex) {

}

/*Dati richiesta per un metodo con protopipo
* String execute (String a , String b, String[] c)
*
* <?xml version=”1.0″?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:SOAP-ENC=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
<SOAP-ENV:Body><jsx1:executeM5Primo xmlns:jsx1=”http://dataMiningWS/”>
<stringfile>
@relation ‘cpu’

@attribute vendor { adviser, amdahl, apollo, basf, bti, burroughs, c.r.d, cdc, cambex, dec, dg, formation, four-phase, gould, hp, harris, honeywell, ibm, ipl, magnuson, microdata, nas, ncr, nixdorf, perkin-elmer, prime, siemens, sperry, sratus, wang}
@attribute MYCT real
@attribute MMIN real
@attribute MMAX real
@attribute CACH real
@attribute CHMIN real
@attribute CHMAX real
@attribute class real

@data
adviser,125,256,6000,256,16,128,199

</stringfile>
<filetype>arff</filetype>

</jsx1:executeM5Primo>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

*/

String data=“<?xml version=\”1.0\”?>” +
“<SOAP-ENV:Envelope xmlns:SOAP-ENV=\”http://schemas.xmlsoap.org/soap/envelope/\” xmlns:SOAP-ENC=\”http://schemas.xmlsoap.org/soap/encoding/\” xmlns:xsi=\”http://www.w3.org/2001/XMLSchema-instance\” xmlns:xsd=\”http://www.w3.org/2001/XMLSchema\”>” +
“<SOAP-ENV:Body><jsx1:executeM5Primo xmlns:jsx1=\”http://dataMiningWS/\”>”
;
data+=“<stringfile>”+file+”</stringfile>”;
data+=”<filetype>”+tipoFile+”</filetype>”;
data+=”<options>”+opzioni+”</options>”;
data+=”</jsx1:executeM5Primo> </SOAP-ENV:Body>     </SOAP-ENV:Envelope>”;

try {
rb.sendRequest(data, new M5PrimoResultHandler());
} catch (RequestException ex) {
//Logger.getLogger(Request.class.getName()).log(Level.SEVERE, null, ex);
}

}

Category: Programmazione | No Comments »