I'm building a custom Xsl to customize the rendering of a ContentByQueryWebPart. This webpart is targeting pictures

In the results, I would like to generate a link to the corresponding dispform.aspx, in order to show the details of the target picture.

How can I generate such link ?

By now, I have created this piece of Xsl to generate the link in my custom ItemStyle.xsl :

&lt;xsl:variable name="DispFormUrl"&gt;
    &lt;xsl:value-of
        disable-output-escaping="yes" 
        select="concat($SiteUrl, '/_layouts/listform.aspx?PageType=4&amp;amp;ListId={',@ListId, '}&amp;amp;ID=', @ID)" 
    /&gt;
&lt;/xsl:variable&gt;


This is working when I work at the root of the site collection. However, this does not works if the results are from another web within the site collection.

How can I correct my xsl to support any location ?


Question: Is a VPN really secure at the VPN providers side?
Answer: 
  If this is the case, am I not just pushing my data further along?


Correct. A VPN is designed to give you a secure connection to the VPN provider; it essentially simulates your being physically on their network. For instance, a corporate VPN simulates being in the office physically connected to the corporate network. This is great when there's some reason to trust the VPN network more than the network you're on for the things you're doing; however, all it amounts to is substituting the VPN provider's network for the network you're on.