Mainīgo deklarēšana

Starp citu … VB6 skaitījās sliktais stils rakstīt šādi:

Dim i, j As Integer

Šādas deklarācijas rezultātā i bija ar tipu Variant, bet j bija Integer (nevis kā varētu šķist, abi Integer).

Toties VB.net šī pieeja ir tiek atbalstīta un saprasta tieši tā, kā tā izskatās.

Iexplorer ContextMenu

Attiecībā uz tīmekļa sistēmu drošību ir teiciens, ka 100% droša sistēma būs 0% lietojama. Tātad, jo drošāk, jo neērtāk. Tā kā pēdējā laikā ir populāri dažādi phishing pasākumi, arī .lv internetbankas cenšas panākt arvien augstāku savu pakalpojumu drošību. Līdz ar to ne tik vien tiek izmantoti SSL pieslēgumi, nesaprotami lietotāja vārdi un pieprasītas garas un sarežģītas paroles, bet arī tiek lietotas kodu kartes (tās ir tādas kartiņas ar daudzām burtu/skaitļu virknītēm, katrai virknītei savs numuriņš. Pieslēdzoties e-bankai tiek pieprasīts ievadīt kādu no virknītēm, piemēram septīto pēc kārtas).

Ideja jau skaista, bet lietojamība… katru reizi, kad gribi apskatīties, kā tavā kontā vēl joprojām ir tikai 3 santīmi, tev jāmeklē karte, uz tās jāmeklē kodi, tie “jāpārdrukā” u.t.t.

Šeit pastāstīšu risinājumu, kā papildināt Internet Explorer contextMenu ar savu funkciju, kas atgriež vajadzīgo kodu kartes ierakstu.

“Gudrību” iešujam JavaScript koda gabalā, kurš pārbauda, vai pārlūkprogramma atrodas manas internetbankas lapā un pēc tam no kodu kartes atrod vajadzīgo kodu un to iekopē “starpliktuvē” (clipboard).

< SCRIPT LANGUAGE="JavaScript">
var parentwin = external.menuArguments;
var doc = parentwin.document;
var sel = doc.selection;
var rng = sel.createRange();
var iNum = 0;

//vai esam nokļuvuši e-bankā
if (external.menuArguments.location.host=="mana.e-banka.lv") {

    //ja jā, tad uzstāda kodu kartes vērtības
    var myCodes = new Array("*****", "*****", "*****", "*****", 
                             "*****", "*****", "*****", "*****",
                             "*****", "*****", "*****", "*****", 
                             "*****", "*****", "*****", "*****");
    //kas iezīmēts browser logā?
    if (rng.text!="")
        iNum = rng.text*1;
        //ja iezīmēts skaitlis, mēģina nolasīt kodu
        if (!isNaN(iNum)) 
            window.clipboardData.setData("Text", myCodes[iNum-1]);
        else 
            alert("Nav iezīmēts skaitlis!") 
    }
else {
   alert("Šobrīd Tu neesi bankas lapā!");
}
< /SCRIPT>

Šādu skriptu saglabājam .htm failā uz cietā diska. Piemēram iekš, c:\i\banka.htm Pēc tam veram vaļā RegEdit, un meklējam šādu zaru: HKEYCURRENTUSER\Software\Microsoft\Internet Explorer\MenuExt Iespējams, tur jau priekšā būs kādi ieraksti no Tilde vai kāda cita programmatūras izstrādātāja, kurš savus produktus integrē MSIE. Pievienojam jaunu atslēgu, tās nosaukums būs redzams konteksta dialogā. Piemēram, es pievienoju atslēgu ar nosaukumu “&KoduKarte”. Atslēgas Default vērtību uzstāda uz .htm failu, kurā saglabāts skripts, tas ir manā gadījumā, c:\i\banka.htm Papildus tam, atslēgā pievieno DWORD vērtību Contexts, kurā ierakstām “10”. Tas nozīmē, ka funkcija kontekstu dialogā būs redzama tikai tad, kad ir iezīmēts teksts. Eksportējot no reģistra, atslēga izskatās šādi:

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\&KoduKarte]
@="c:\\i\\banka.htm"
"Contexts"=dword:00000010

Pēc tam atliek atvērt jaunu InternetExplorer logu un tajā jau būs pieejama jaunā funkcija. Tikai tad, kad būs atvērta internetbankas lapa, tikai tad, kad būs iezīmēts teksts un nospiesta peles labā poga.

Vēlreiz brīdinu, ka šādi darīt nav labi un pavisam noteikti IR SLIKTI, jo šādā veidā Tu samazini Tavas bankas izveidotās drošības sistēmas drošības līmeni. Jo gadījumā, ja kādam citam būs pieeja Tava datora cietajam diskam, viņš(a) varēs nolasīt failu, kur glabājas kodi un tad viņam(ai) atliks TIKAI UZMINĒT TAVU LIETOTĀJA VĀRDU UN PAROLI, lai iekļūtu bankas lapā!

MSDN mazliet mānās par ASP.Net failu upload

Mēģinām augšuplādēt (upload) failu ASP.net lapā. Priekš tam lapas kodā jāievieto apmēram šāds:

<input id="myFile" type="file" runat="server" />
<input type=button id="cmdUp" runat="server" />

Pēc tam varam ķert notikumu, kad nospiesta upload poga. Pēc MSDN rādītā piemēra, pietiek pārbaudīt vai UploadedFile atribūts nav nothing, tas ir, šādi:

Private Sub Uploads (ByVal s As System.Object, ByVal e As System.EventArgs) Handles cmdUp.ServerClick
         If  Not Me.myFile.PostedFile Is Nothing Then
        '... darām kaut ko
        End If
End Sub

Tomēr patiesībā “Not Me.myFile.PostedFile is Nothing” vienmēr atgriež True – pat tad, ja faila nav. Vismaz pie konfigurācijas, kāda tā ir man. Līdz ar to vienīgais veids, kā pārbaudīt, ka tiešām kaut kas ir uploadēts, ir:

Private Sub Uploads (ByVal s As System.Object, ByVal e As System.EventArgs) Handles cmdUp.ServerClick
         If  (Not Me.myFile.PostedFile Is Nothing) AndAlso _ 
            (Me.myFile.PostedFile.ContentLength>0) Then
        '... darām kaut ko
        End If
End Sub

Tā, redz!

.net asambleju parakstu maiņa

Gadījās tā, ka vajadzēja VB.net projekta referencēs pielikt “vecu” Microsoft Excel objektu bibliotēkas versiju.

Uz mašīnas instalēta kaut kāda jaunāka office versija un attiecīgi visi atrodamie excel.dll faili vairs nav “pareizi”. Tomēr izdevās no viena cita projekta atrast jau gatavu interop.excel.dll. (Interop asamblejas ir .net videi draudzīgi “starpnieki” darbam ar COM vidi.) Diemžēl bibliotēka, kuru atradu, nebija parakstīta ar “strong name key“. Ja ir vēlme panākt, ka tava asambleja tiek parakstīta ar atslēgu, tad visām asamblejām, uz kurām tiek likta reference, jābūt parakstītām ar strong name.

Priekš tam darām pavisam vienkārši:

  • Dekompilējam asambleju uz Intermediate Language kodu, lietojot ildasm rīku

    C:\i> ildasm interop.excel.dll /out=iexcel.il  
    // WARNING: Created Win32 resource file iexcel.res  
    C:\i>ren interop.excel.dll old_interop.excel.dll
    
  • Izveidojam savu atslēgas failu, lietojot sn rīku

    C:\i>sn -k my.key
    
  • Kompilējam IL kodu atpakaļ uz .net baitkodu, lietojot ilasm

    C:\i>ilasm /dll /res=iexcel.res /out=Interop.excel.dll /key=my.key iexcel.il
    

Šeit pieņemu, ildasm un ilasm rīku taka ir atrodama sistēmas PATH mainīgajā.
Pēc pirmās komandas izpildes rīks brīdina, ka ir izveidots arī resursu fails iexcel.res, kuru nevajadzētu aizmirst iekompilēt rezultējošajā asamblejā.

Rezultātā tiek iegūta jauna asambleja interop.excel.dll, kas parakstīta ar tikko izveidoto privāto/publisko atslēgu pāri my.key Šo asambleju var ievietot sistēmas GAC direktorijā un izmantot no jebkuras citas aplikācijas.

Jābrīdina, ka parakstīt svešu asambleju ar savu privāto atslēgu ir “sliktais tonis” – pirmkārt jau tādēļ, ka tādējādi tu uzņemies zināmu atbildību par sekām, kuras var atstāt koda izpilde.

Ja nepieciešams nomainīt parakstu jau parakstītai asamblejai, tad pēc dekompilācijas jāparediģē IL fails, nomainot publiskās atslēgas “token” uz savas atslēgas tokenu. Piemēram, šādi izskatās MS parakstītās bibliotēkas mscorlib tokens.

.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
  .ver 1:0:5000:0
}

Pēc tam atkal fails jākompilē atpakaļ uz baitkodu.

.htaccess

Ko darīt ja kādreiz sagribas izveidot .htaccess failu, bet pa rokai ir tikai Windows operētājsistēma? Ja vienkārši “New->Text File” dialogā izveidojam jaunu teksta failu un mēģinām tam nomainīt nosaukumu uz .htaccess, Windows paziņos, ka “You must type a file name”.

Vienkāršākais veids, ko esmu atradis, ir:

  • Notepad sarakstām visu nepieciešamo saturu
  • Spiežam file->Save as
  • File name ierakstām .htaccess
  • Pie “Save as type” izvēlamies “All Files”
  • Spiežam save

Uzmanīgi, ja netiek izvēlēts “All files”, tad radīsies fails .htaccess.txt!