Miracle - Ett ärendehanteringssystem

Permalänk
Medlem

Miracle - Ett ärendehanteringssystem

Jajamen, nu har jag suttit och fifflat på ett projekt som hittills varit mitt allra seriösaste arbete hittills.
Efter att ha gått klart Programmerings kurserna som fanns tillgängliga på John Bauer i Östersund (Programmering A, B och C, webbutveckling och en otrolig låg mängd C++) så ville jag pröva mina kunskaper för att se om jag kunde utveckla ett program som skulle funka som ett support verktyg.

Programmet är ännu inte klart men skulle gärna vilja dela med mig av mitt projekt med SweClockers i hopp om konstruktiv kritik och överhuvudtaget få höra era åsikter kring mitt projekt.

Vill passa på att tacka användarna Save och KurreKula.
Save för att ha hjälp skapa logotypen för projektet och KurreKula för många förslag och hjälp kring SQL och varierande komponenter i C#.

Programmet är utvecklat under Microsoft Visual C# 2010 och använder Oracle's databas för att överföra data mellan användare och administratör.

Detta är den preliminära designen på loginskärmen.

Detta är då det grafiska man kommer till när du loggat in.

För att komma åt bilderna i större format så gå till följande länkar: Loginskärm, Gränssnittet.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk

Fint det blev

Visa signatur

Dator 1|Fractal Design R3 Titanium|AMD Phenom 2 X6 1055T 2.8Ghz |Noctua NH-U9B SE2|Gigabyte GA-880GM-UD2H |Corsair 8GB 4x2GB XMS3 DDR3|AMD 7970| Chieftec750w| Intel 320 120GB SSD|
Servern|NZXT Lexa S |AMD Dualcore 3.1Ghz|Arctic Cooling Rev2 |Gigabyte DS3 |4x2 Crucial DDR2 667mhz |Nvidia GT 430|4x2TB Western Digital Green|Chieftec 400w|
"Try not. Do or do not, there is no try"

Permalänk
Medlem

Väldigt stilrent och snyggt får jag lov att säga.

Visa signatur

| CPU: Intel Core i5 3570K | Mobo: MSI Z77A-GD65 ATX | Ram: Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE | GFX: Gigabyte HD7970 OC 3GB | SSD: Corsair Force 3 120GB | HDD: Diverse Mekaniska 4TB | Chassi: Corsair 800D | PSU: Corsair AX 850W 80+ Gold Modulär | CPU Cooler: Corsair H50 |
Citera mig så hittar jag tillbaka hit :)

Permalänk

Hmm. Programmet är ju alltid i domänen? Varför inte utnyttja det och autentisera mot windows-domänen istället för att be om lösenord?

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

Ursäktar att jag inte kunnat uppdatera denna tråden men tyvärr har komplikationer uppstått med mitt medlemskap här. Men nu är det fixat.

Nya versionen innehåller:

- Reklam system : om det finns någon syns en pop-up vid starten (inte en dialogruta)
- Mail notifiering vid besvarat ärende : författaren av ärendet får ett mail om att det är besvarat
- Ny förbättrad sökfunktion : med säkrare kod
- Ny design : Som sedd i bilden nedan
- Min profil : visar statistik, licens, ta bort konto alternativ, inställningar, konto-information m.m.
- Admin system : med rättighet att besvara ärenden
- Layouter : Val mellan layouter som: Stylish black och Classic Blue
- Ansök medlemskap : Lagt till att du kan bli medlem direkt i programmet
- Ta bort medlemskap : För att kunna ta bort kontot om man inte önskar ha kvar det

Nya designen:

Storleken på programmet är anpassat efter laptoparna på min skola och därför en konstant storlek. Storleken ligger på: 1200 x 600.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Medlem

Ångrade mig med Stylish black temat då det var för "dystert" så jag tog fram Classic Blue istället, eller som det blir nu, standard.

Uppdaterings logg:

  • Reklamverktyg vid loginskärmen
    Om vi angett att en reklam ska visas så kommer den
    slumpa mellan ett x-antal reklam-annonser och kommer sedan
    visa en enda i pop-up'en.

  • Uppdatering av programmet
    Programmet söker efter en nyare aktuell version av Miracle
    och berättar att den finns och frågar: "Vill du uppdatera?" och
    som sedan startar en uppdate-wizard för Miracle.

  • Nya designen
    Eftersom min egna åsikt kring den
    gamla designen var så negativ så bes-
    lutade jag mig för att skapa en ny snygg design

  • All kod omstrukturerad in i klasser
    Gammal kod som enbart används för att
    testas har nu flyttats och börjat användas enklare och
    bättre i Form1.

  • Förändrad och förbättrad sökfunktion
    Förrut hade man en mycket mer simplare sökfunktion
    som fick många fel konstant, utbytt mot den nya med säkrare kod

._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-.

Här är bilder på programmet som det är nu.
Allting är preliminärt och visas upp här för att få kritik
och för att visa framsteg, ändringar och design

Loginskärmen

Sökfunktionen

Skaffa ett konto

Välkomstskärmen..

Skapa ett nytt ärende..

Planer:

  • Ny slogan
    Erkänn, "Simple and real, a Miracle" suger.. ganska hårt. Förslag tack!

  • Förbättra update-wizard, snabbare kod.
    Förbättra hur den söker efter programmet, hur den laddar ner paketen och
    ersätter dom gamla filerna för att uppdatera programmet.

  • Lagra mer statistik-data i ärenden
    Mer statistik, hur många gånger den visats, prio-nivå osv.

  • Skapa egna rubriker för varje spalt i datagriden
    Handskrivna rubriker för att ersätta de existerande i databasen som
    är på Engelska och väldigt svårförstådda för nybörjare

Projektet använder och kräver:

  • Form1.cs
    Och dess beståndsdelar

  • MySQL.Data.cs
    Skapar alla kontakter med mysql servern

Ge mig jättegärna förslag på hur jag kan förbättra mig själv, programmet och annat på.
//Utvecklaren

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Medlem

Update-wizard?

Vad använder du för wizard för att hålla koll på uppdateringar?

Mitt tips är ClickOnce som är en inbyggt i .NET-ramverket. Fungerar kanon!

Visa signatur

Sony Vaio FE21M

Permalänk
Medlem

Update-Wizard är ett handbyggt program som är en .exe eller ett annat projekt vid sidan av som uppdaterar filerna i Miracle.
Själva Miracle kommer själv att kolla om en uppdatering finns, men om den finns och accepteras startas Update-Wizard.

Ska ta en titt på ClickOnce eftersom du nu rekommenderar det skadar ju inte att fördjupa sig ^^

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Medlem
Skrivet av KurreKula:

Hmm. Programmet är ju alltid i domänen? Varför inte utnyttja det och autentisera mot windows-domänen istället för att be om lösenord?

Programmet funkar faktiskt nu utanför domänen. Därför kunde jag inte direkt använda det som autentisering, däremot kommer troligen användarens IP kollas vid inloggningar för att kolla om någon snott kontot i framtida bruk.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Medlem
Skrivet av freddyfresh:

Ge mig jättegärna förslag på hur jag kan förbättra mig själv, programmet och annat på.
//Utvecklaren

En intressant detalj bara. För ca 2 år sedan läste jag en kurs i avancerad C# .NET (malmö högskola via distans). I den kursen använde man sig av databinding mellan datagridview och objekt. Det ser ut som att du använder en sådan från skärmdumpen att döma, så om du inte använder databindning så kanske det vore ett snyggt tillvägagångssätt som du skulle kunna använda dig av.

Visa signatur

AMD 5700X@Vatten | asus prime x370pro | Asus 2080 Strix | 2x16GB Kingston Fury Renegade RGB DDR4 3.6GHZ | Lian Li O11d EVO + 2x240 EKWB RAD + 6 Lian Li AL120 | CoolerMaster V850 | NVME 2TB Seagate Firecuda 510 + NVME 1TB WD BLACK + 3 SSD | Samsung Odyssey 49" G9| DELL 2713HM | Varmilo VA69 Clear/brown | Logitech G502 2016.

Phenom X6 1045T | Corsair TWIN2X PC6400C4DHX 2x2GB + Crucial Ballistix Sport 2x2GB | Gigabyte ma785gmt-us2h | Silverstone Temjin 08 | Corsair VX450

Permalänk
Medlem
Skrivet av freddyfresh:

Ångrade mig med Stylish black temat då det var för "dystert" så jag tog fram Classic Blue istället, eller som det blir nu, standard.

  • Form1.cs
    Och dess beståndsdelar

  • MySQL.Data.cs
    Skapar alla kontakter med mysql servern

Så klienten står i direkt kontakt med MySQL? Betyder inte det att det är en relativt smal sak att snappa upp lösen osv och sen leva rövare på servern?

Permalänk
Medlem
Skrivet av DeluxXxe:

En intressant detalj bara. För ca 2 år sedan läste jag en kurs i avancerad C# .NET (malmö högskola via distans). I den kursen använde man sig av databinding mellan datagridview och objekt. Det ser ut som att du använder en sådan från skärmdumpen att döma, så om du inte använder databindning så kanske det vore ett snyggt tillvägagångssätt som du skulle kunna använda dig av.

Det stämmer, jag använder databinding för att hämta data och fylla datagridview'en med.

Skrivet av iXam:

Så klienten står i direkt kontakt med MySQL? Betyder inte det att det är en relativt smal sak att snappa upp lösen osv och sen leva rövare på servern?

Jag själv är ingen större expert på MySQL utan har nyligen påbörjat användningen av detta.

Filen MySQL.Data.cs innehåller de lösen och användare till servern (ett lösenord på blandade stora och små bokstäver ~13 stycken) samt ett användarnamn som är simpelt. Denna filen kan ingen komma åt, den delas med andra ord inte ut. Det som användaren till detta verktyg skulle få är en .exe fil som är packad med alla filer så att de inte ska gå att öppna.

Själv är jag absolut nybörjare när det kommer till injektioner men oavsett så är det kanske inte mycket värt att säga men alla frågor till servern är redan definierade i källkoden och kan inte ändras, användaren kan blott skriva in ett ord som sedan följs av slutet av frågan. Sen finns det inget sätt som den frågan kan returnera ett svar eftersom användardata ligger i en separat tabell som inte sökmotorn i verktyget söker igenom.

Någon som kanske är lite mer insatt i detta borde förklara för mig eller referera mig till ett sätt/ställe jag kan lära mig på/utav.

Verktyget kommer mest troligtvis senare släppas som ett open-source.
Notera att detta enbart är en hobby och att jag saknar en utbildning för detta som ligger på universitetsnivå (3 års utbildning på gymnasie endast i kurser: a, b, c och övrig programmering i C#), jag har detta som hobby.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Skrivet av freddyfresh:

Det stämmer, jag använder databinding för att hämta data och fylla datagridview'en med.

Jag själv är ingen större expert på MySQL utan har nyligen påbörjat användningen av detta.

Filen MySQL.Data.cs innehåller de lösen och användare till servern (ett lösenord på blandade stora och små bokstäver ~13 stycken) samt ett användarnamn som är simpelt. Denna filen kan ingen komma åt, den delas med andra ord inte ut. Det som användaren till detta verktyg skulle få är en .exe fil som är packad med alla filer så att de inte ska gå att öppna.

Själv är jag absolut nybörjare när det kommer till injektioner men oavsett så är det kanske inte mycket värt att säga men alla frågor till servern är redan definierade i källkoden och kan inte ändras, användaren kan blott skriva in ett ord som sedan följs av slutet av frågan. Sen finns det inget sätt som den frågan kan returnera ett svar eftersom användardata ligger i en separat tabell som inte sökmotorn i verktyget söker igenom.

Någon som kanske är lite mer insatt i detta borde förklara för mig eller referera mig till ett sätt/ställe jag kan lära mig på/utav.

Verktyget kommer mest troligtvis senare släppas som ett open-source.
Notera att detta enbart är en hobby och att jag saknar en utbildning för detta som ligger på universitetsnivå (3 års utbildning på gymnasie endast i kurser: a, b, c och övrig programmering i C#), jag har detta som hobby.

Har du lösenorden i em MySQL.Data.cs-klass? Kompileras den med i exen som klienterna får? Då är det en smal sak att dekompilera det och sen ha alla lösenord. Kolla t.ex. vad du kan hitta med http://www.jetbrains.com/decompiler/

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Skrivet av freddyfresh:

Själv är jag absolut nybörjare när det kommer till injektioner men oavsett så är det kanske inte mycket värt att säga men alla frågor till servern är redan definierade i källkoden och kan inte ändras, användaren kan blott skriva in ett ord som sedan följs av slutet av frågan. Sen finns det inget sätt som den frågan kan returnera ett svar eftersom användardata ligger i en separat tabell som inte sökmotorn i verktyget söker igenom.

Någon som kanske är lite mer insatt i detta borde förklara för mig eller referera mig till ett sätt/ställe jag kan lära mig på/utav.

Den grova missen i säkerhetstänket här är inte grundat i "SQL-injections" utan att du tänker skeppa en binär som har user och lösen direkt in till en databas.
Det gör detsamma om du har "starkt" lösenord eller tom krypterar det det i programmet.
Antingen så dekompilerar man koden eller så nätverkssniffar man och vips så ska man kunna komma över lösenordet för att sen manuellt med valfri klient kunna koppla upp sig mot databasservern för att sen kunna göra allt som ditt program har rättigheter att göra. Och om det rör sig om fulla rättigheter så kan man ju tanka ner all data, modifiera all data, radera all data osv.

Permalänk
Medlem

Väl medveten om vad som kan hända om lösenordet och användare blir given till användaren, MySQL.Data.cs hämtar lösenordet från form1.cs som ligger i en string.

Någon som har ett säkert exempel på en anslutning?

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Medlem
Skrivet av freddyfresh:

Väl medveten om vad som kan hända om lösenordet och användare blir given till användaren, MySQL.Data.cs hämtar lösenordet från form1.cs som ligger i en string.

Någon som har ett säkert exempel på en anslutning?

Du får skriva en server som klienten kommunicerar med. Och då INTE med SQL för då riskerar du ju att sitta i skiten igen. Vill du inte hålla på med sockets och sånt själv kan du ju köra med någon webbserver och lämpligt serversidespråk.

Permalänk
Medlem

Ursprungligen var detta programmet uppkopplad mot en stark sql server på ett gymnasie, den skulle klara över 1000 förfrågningar i korta intervaller, men sant.

Några exempel på bra funktioner som bör inkluderas?
Programmet klarar av att:

  • Skapa användare

  • Ta bort användare

  • Redigera lösenordet

  • Lägga in ett meddelande

  • Besvara och redigera ett meddelande

  • Olika typer av konton (admin, användare)

  • Reklam

  • Hämta och visa meddelanden

  • Konto sida: info om användaren

  • Bild till konto-sidan via HDD eller URL

  • Sökfunktion

  • Externt program för administration

  • Bra exempel på eventuella regler som kan användas

Att programmet kan uppdateras är inte löst än men det ska försöka lösas.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Medlem
Skrivet av freddyfresh:

Ursprungligen var detta programmet uppkopplad mot en stark sql server på ett gymnasie, den skulle klara över 1000 förfrågningar i korta intervaller, men sant.

Du förstår att programmet inte kan släppas för användning om du inte löser säkerhetsproblemen va? Speciellt inte när dom är exponerade här på ett av sveriges största forum.

Permalänk
Medlem

Fullt medveten om det men problemet kvarstår tills jag lyckats lösa det.. behöver dock lite hjälp ^^

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Medlem
Skrivet av freddyfresh:

Fullt medveten om det men problemet kvarstår tills jag lyckats lösa det.. behöver dock lite hjälp ^^

Gutgut! Så det du behöver göra är att ha en server. Enklast är säkert en webserver med någon form av server sidespråk. Eftersom du redan programmerar i c# så kan du ju använda det.
Det du inte vill göra är att kunna skicka SQL direkt från klienten till servern. Så du kommer då att behöva skapa sätt att kommunicera med servern på. Och där kan man använda en massa olika sätt som XML,JSON, egna format samt förmodligen något Microsoftpåkommet.

Permalänk
Medlem

Ja iofs, denna mjukvaran blev ju ursprungligen utvecklad för en server som palla 1000 förfrågningar utan problem inom kort tid så server delen var ju inte en komplicerad sak just då, särskilt med tanke på att den var väldigt strikt när det kom till anslutningar.

Ska fortsätta klura lite alternativt får användaren databasstrukturen i en readme som dom sen själv får integrera i sin egna server ^^ nej men skämt åsido Ska fundera mer.

Alternativet vore ju att bygga servern själv, sälja licenser och låta dom ansluta via min för att kommunicera.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Skrivet av freddyfresh:

Ja iofs, denna mjukvaran blev ju ursprungligen utvecklad för en server som palla 1000 förfrågningar utan problem inom kort tid så server delen var ju inte en komplicerad sak just då, särskilt med tanke på att den var väldigt strikt när det kom till anslutningar.

Ska fortsätta klura lite alternativt får användaren databasstrukturen i en readme som dom sen själv får integrera i sin egna server ^^ nej men skämt åsido Ska fundera mer.

Alternativet vore ju att bygga servern själv, sälja licenser och låta dom ansluta via min för att kommunicera.

Ett enkelt sätt är ju att bara sätt upp en WCF-server som sköter detta...

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

Blir nog något att bita i när lovet kommer ^^ studier upp i nacken nu när man är ny student på universitet.
Ska däremot läsa lite och lära mig använda det då

Som jag säger, hade vart enklare om jag var insatt i kommunikation mellan servrar och inte enbart programmeringsdelen

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Medlem
Skrivet av KurreKula:

Har du lösenorden i em MySQL.Data.cs-klass? Kompileras den med i exen som klienterna får? Då är det en smal sak att dekompilera det och sen ha alla lösenord. Kolla t.ex. vad du kan hitta med http://www.jetbrains.com/decompiler/

Hur ska jag göra för att skydda detta då? En krypterad nyckel i en inläst fil?

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Skrivet av freddyfresh:

Hur ska jag göra för att skydda detta då? En krypterad nyckel i en inläst fil?

Nä. Du måste ju ha en tvåvägskrypering om du vill kunna använda strängen till något så det enda du kan göra är att t.ex. skriva en WCF-service som du anropar. Det blir aldrig säkert om du ska ansluta direkt mot databasen

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Skrivet av KurreKula:

Nä. Du måste ju ha en tvåvägskrypering om du vill kunna använda strängen till något så det enda du kan göra är att t.ex. skriva en WCF-service som du anropar. Det blir aldrig säkert om du ska ansluta direkt mot databasen

Har tagit en snabb titt på WCF tjänster i C# men är inte direkt van vid det sättet man jobbar på och vet inte riktigt hur jag ska använda det i mitt färdiga program... Prövade att dekompilera projektet och som sagt så kunde man snabbt få tag i all vital fakta om anslutningen (ip, användare, lösen, databas, osv).

Funderar på om det inte finns något enklare sett :S nog för att det troligen inte skulle skada att lära sig WCF men ändå

SQL servern som jag använder är väldigt stark och ska klara av många förfrågningar samtidigt, den finns på mitt föredetta gymnasieskola och det vore ju dumt att låta fel person ansluta till den ^^

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Medlem
Skrivet av KurreKula:

Nä. Du måste ju ha en tvåvägskrypering om du vill kunna använda strängen till något så det enda du kan göra är att t.ex. skriva en WCF-service som du anropar. Det blir aldrig säkert om du ska ansluta direkt mot databasen

Men vad är det som säger att vi inte bara kan dekompilera WCF-service klasserna och sedan greppa lösenordet därifrån då?
Verkar ju faktiskt lite svårt om jag ska försöka skydda något som inte går att skydda :/

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Medlem

Om du skapar en hash vid inloggningen som servern returnerar vid lyckad inloggning och som måste följa med vid varje WCF anrop så blir den genast säkrare.

Permalänk
Medlem
Skrivet av jonke:

Om du skapar en hash vid inloggningen som servern returnerar vid lyckad inloggning och som måste följa med vid varje WCF anrop så blir den genast säkrare.

Ja så ska man ju kunna sånt där också
Jag kan basic: html, sql, css och har tre årsutbildning i C# men vi har konstigt nog aldrig gått igenom WCF service..

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Skrivet av freddyfresh:

Men vad är det som säger att vi inte bara kan dekompilera WCF-service klasserna och sedan greppa lösenordet därifrån då?
Verkar ju faktiskt lite svårt om jag ska försöka skydda något som inte går att skydda :/

Du kommer aldrig kunna skydda från att de kan anropa WCF-servicen. Men eftersom de aldrig har direktkontakt med databasen kan de inte komma åt den. De kan aldrig dekompilera din WCF-service då den ligger hostad på en server som de inte kommer åt. De kan bara göra det du tillåter dem att göra via servicen

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase