Archive for 27. nov. 2009

MSSQL: backup teemalised lingid

november 27, 2009

Viimasel ajal tuleb minu blogisse otsingusse aina rohkem MSSQL backup teemalisi küsimusi; samas jäänud mulje, et tahetakse ka taastada andmebaasi ilma koopiata. Ütleme nii, et pihta saanud ketta puhul see peaaegu võimatu missioon. Varukoopiad on iga süsteemi alustala, ei piisa sellest, et korra kuus teen koopia.

Backing Up and Restoring Databases in SQL Server

Database-Mirroring-Using-T-SQL

http://blog.sqlauthority.com/2009/09/02/sql-server-mirrored-backup-and-restore-and-split-file-backup-2/

http://www.databasejournal.com/features/mssql/article.php/3782401/SQL-Server-2008-Recovery-Models-and-Backups.htm

http://www.databasejournal.com/features/mssql/article.php/3591131/COPYONLY-Backups-in-SQL-Server-2005.htm

Programmikood, mis tekitas iivelduse…

november 25, 2009

Olen vist alates Delphi 1.0 alates igasugu teist koode parandanud ja täiustanud; nüüd on tulnud selliseid pirne, et pidin sellest lausa kirjutama. Öeldakse, inimene kas on programmeerija või ei ole, teisel juhul lihtsalt firma raha raiskaja.

Pirn nr 1: muutuja, mis on kõikjal.
– Globaalsed muutujad on saatanast, nende kasutamine peab olema eriti teadlik tegevus.
Enamasti on globaalsed muutujad eraldi unitis ala teed myglobals uniti;

Parameetrite edastamine ühest protseduurist teise globaalsete muutujate kaudu nimetatakse lausa halvima stiili musternäide.

unit1


var
dataindx : integer = 10;

unit2


var
dataindx: integer = 15;

ja siis unit3

implementation
uses unit1,unit2;


procedure dosomething;
begin
palju arvutusi ja dataindx…
end;

Juhul, kui üldse globaalset muutujat oleks vaja kasutada, mis sama nimega, siis ÄÄRMISEL juhul kasutada nii

procedure dosomething;
begin
palju arvutusi ja unit2.dataindx…
end;

Pärast leidsin ka protseduure, kus sisemiselt oli sama nimega muutuja defineeritud. Siis imestati, miks kusagil mingi array index üle piiride lendab.

Pirn nr 2: loodud globaalne massiiv A : Array[1..20000] of shortstring;

Selline praktika täiesti mõeldamatu, et nii andmeid hoida, seal oleks täiesti sobilik olnud TStringlist

või äärmisel juhul.

type
TStrArr = Array of string;
var
B : TStrArr;
….

setlength(b,512);

Pirn nr 3 Visuaalses pooles täielik käkerdamine.
Kui objektidel on property Enabled, siis kasutati hoopis võrdlemisel Color property’d ala objekt keelatud color=btnFace.

Pirn nr 4 Sul on ekraanil 95 visuaalset objekti ja tahad need korraga, kas enableda või disableda. Sa ei hakka ju tegema (aga reaalsuses tehti):
label1.enabled:=false;
label2.enabled:=false;
edit1.enabled:=false;

Teed omale utilities moodulisse funktsioonis, mis käib vormi komponendid üle ja vaatab, kas on enabled property olemas ning vastavalt soovile see kas true / false.

Pirn nr 5 Juhul, kui vaja andmebaasi mingid väärtused salvestada ning sa ei saa TDbComboboxi kasutada ning kasutad tavalist comboboxi, aga kuidas hoida indekseid ja valikuid jälgida.

Kood, mille mina leidsin sealt – Query abil loetakse andmed combosse;

Siis, kui tuli salvestamine kood: HARDCODED nimed;
if mycombo.text=’Goods’ then value:=1
else
if mycombo.text=’Cars’ then value:=2

Täielik katastroof, tootesse ei tohi kunagi midagi niimoodi hardcoded stiilis kirjutada.

Juhul, kui tavaline combo, siis tuleks ka nimetusega siduda väärtus, mis baasist tuli.

select id,name from …

while ….
if fieldbyname(’id’).asInteger>0 then
cmb.addobject(fieldbyname(‘name’).asString,TObject(Cardinal(fieldbyname(’id’).asInteger)));

end

Hiljem, kui väärtus valitud saab teha
id:= …Cardinal(objects[i]);

Täiesti lubatud lahendus, kui id väärtus jääb Cardinali väärtuse vahemikku. Pointer objektile ei pea olema objekt. Lihtsalt, kui addobject(…,TMyData.create(id)) teha, siis on oht, et hiljem unustatakse see abistav klass vabastada ! Seda viga esineb liiga palju.

Ka oli lahedust kasutatud, kus combo element oli stiilis

Car[ja mingi 1000 tühikut] :5

Pirn nr 6

Iga andmebaasi tegevuse jaoks oli tehtud oma query, datamodule oli nii kirju, et mul lõi endal pildi virvendama. Ntx kontrollpäringuid oleks saanud vabalt teha läbi ühe query.

Pirn nr 7

Jube palju kasutati andmebaasi puhul variante.
fieldbyname(‘somevalue’).value:=’A’;
fieldbyname(‘somevalue’).value:=123;

Seetõttu leidsin ikka X vigu, kus tuli invalid conversion. Üldiselt variant ka muutuja, mida tohib kasutada ainult teadlikult. Suurem rakendus neil pigem ActiveX juures, muidu kui on võimalik neid vältida, vältige

Pirn nr 8
Muutujate nimed ka täiesti kaootilised. Ühe protseduuri all võis olla kuni 40 muutujat stiilis aaaa,b1,c3,kkk,da,pbb ……

…nii side lõpp…üritan midagi ilusat mõeldaselle leitud kaose kõrvale.

Turvalisus: kodukootud keyloggeri demo

november 23, 2009

Meeldetuletus: peale ID kaardiga tehingute tegemist, EEMALDAGE TA LUGEJAST (kui teil pole pinpad tüüpi lugeja)

Nii, seoses tuttavate võhiklikkusega arvuti turvalisuses, panin kokku keyloggeri, mis kuvab erinevates programmides tehtud klahvivajutusi.

Programm ise on siin

Lähtekoodi ei saanud panna, kuna seda võiksid kasutada kuritahtlikud isikud ja see pole õige !

—————————

Antud programmi kirjutamine võttis aega umbes 40-45 min max. nö unicode tüüpi keylogger ehk venekeelsete klaviatuuridega peaks ka sõber olema. Tõusutundlikust ja juhtmärke hetkel ei järgi, selle lisamine on ülimalt lihtne, aga pole vajadust 🙂


Tuttaval tõmbus nägu siis krimpsu, kui sisestas ID kaardi PIN1 ja ka hiljem makset tehes PIN2…väga krimpsu…

Tahaksingi lühidalt rääkida suunatud ründest…

Üldiselt suunatud rünne: teatakse mingit miljonäri või üldse jõukat pereisa, lastakse mingil igavleval programmeerijal kirjutada tarkvara, millele antud ülesanded. Teha mingi kuupäev automaatselt pangaülekanded nagu teate, et PIN2 avab paljud taevaväravad ja natuke sõltub pangalimiitidest. Aga tarkvara võib ka ekraani teateid lugeda ning proovida siis väiksemaid summasid.

Kus antud tarkvara sinna satub; A) võhiklik arvutikasutaja, kes avab kõike B) perepojad, kes leidsid juhuslikult postkastist uue DOOM mängu või saabud mingi ajakirjaga kaasas LAHE CD.

Kuna tegemist on suunatud ründega, et tarkvara kirjutud eritellimusena, siis ei löö ükski viirusetõrje ka häirekella. Nüüd istub tarkvara arvutis ning ootab PIN1 ja PIN2; saab kätte jääb õiget kuupäeva ootama, ntx võib ta käia ka kontoseisu vaatamas läbi pangalehe. Arvuti IDLE ja programm tegutseb; Internet Exploreris saab vägagi edukalt ehitada automatiseerimist, ka sertide valimist. Sellise programmi kirjutamine võtab maksimaalselt 3-4 päeva aega !

Tõesti sellise tarkvara kirjutamine Windowsil ülilihtne; Linuxil pakub peavalu !

Demo programmist endast:
– logitud andmed kustutatakse memost iga 30 sekundi tagant
– andmeid ei ole võimalik memost kopeerida

Loodame, et mõistate, üritan sellega välistada igasugust programmi väärkasutust.

Paljude programmide turvalisust saaks lihtsalt parandada, eriti seal, kus paroole küsitakse. Meetod lihtsamast lihtsam; enne parooli sisestamist küsitakse kes on pildil, kas eesel või elevant või ahv ning need pildid vahelduks. Ka küsimus ei oleks mitte label objektiga loodud vaid pildina.

Isegi kui parool on teada, ei saa seda kasutada automaatsüsteemid, sest nemad ei tee vahet on seal siga või kana või eesel. Igal kasutajal ka erinevad pildid. Siis oleks vaja juba füüsilist juurdepääse kasutaja ID kaardile, et pangaülekannet teha !