Thursday, December 15, 2011

Ottenere la versione di SharePoint


Ottenere la versione della build di SharePoint 2010 è un operazione estremamente semplice, ma ... ci sono dei ma.

Il metodo migliore per ottenere la versione è quello di aprire la Central Admin e nella sezione System Settings accendere alla voce Manage servers in this farm (http://site/_admin/FarmServers.aspx).


Per avere delle informazioni di dettaglio su tutti i componenti installati (es. language pack) si può andare su Upgrade and Migration e selezionalare Check product and path installation status (http://server/_admin/PatchStatus.aspx)



In entrambe i casi è comunque necessario fare accesso alla Central Admin. Ci sono alternative?

Se abbiamo accesso al SQL Server che ospita il database della Central Admin e si ha a disposizione SQL Management Studio, questo script TSQL ci restitusce la build number.
SELECT Version, UserName
FROM Versions
WHERE VersionId = '00000000-0000-0000-0000-000000000000'
ORDER BY Id DESC

Se possiamo fare girare del codice su server SharePoint si può creare una console application che estrae le stesse infomazioni.
using (SPSite startSite = new SPSite("")) {
   SPFarm farm = startSite.WebApplication.Farm;
   SPWebService service = farm.Services.GetValue("");  
   foreach (SPWebApplication webApplication in service.WebApplications) {
      foreach (SPSite site in webApplication.Sites)   {
         Console.WriteLine(string.Format("{0} - {1}", site.Url, site.ContentDatabase.Name)); 
      }
   }
}

Naturalmente questi metodi devono essere eseguiti con un utente che abbia i diritti appropriati. Se non avessimo questi diritti? Se fossimo abilitati ad accedere ad una site collection con una security più limitata? Per farla ancora più difficile: da un sito di publishing pubblicato su internet e acceduto in modalità anonima possiamo identificare la build installata?
La risposta è sì, ma ... non è detto che il dato ottenuto sia "sempre" affidabile.

Per ottenere la versione si deve analizzare il contenuto delle HttpResponse generate da SharePoint  e tra gli header troveremo uno dal nome MicrosoftSharePointTeamServices. Questo header è configurato su IIS da SharePoint 2010 e mantenuto aggiornato dai vari  aggiornamenti di SP e CU.



Via Javascript possiamo così scrivere alcune righe di codice per risalire dalla build.
var xmlHttp = new XMLHttpRequest();
var url = "http://yoursite"; 
xmlHttp.open('HEAD', url, false);
xmlHttp.send();
var SPVersion = xmlHttp.getResponseHeader("MicrosoftSharePointTeamServices");

NOTE: talvolta gli IT Admin considerano che l'esposizione di questo tipo di informazioni possa in qualche modo 'ledere' la sicurezza della farm. Il ragionamento è "se chiunque è in grado di ottenere informazioni sul livello di Patch, la stessa persona potrebbe attaccare la piattaforma sfruttando le vunerabilità conosciute". Di fatto però la maggior parte dei siti internet ospitati su SharePoint espongono questa informazione ... provare per credere!


UPDATE 15/1: ovviamente anche via Powershell con l'addin di SharePoint 2010 otteniamo la build tramite (Get-SPFarm).BuildVersion

0 comments:

Post a Comment