JSP harjoitustyö
1 Harjoitustyön vaatimukset
Katso myös kotisivulta JSP ja Eclipse ja Harjoitustyön teko-ohjeet pääteohjaus 2:sta
Valmis: heinäkuun loppuun mennessä, ohjausajat vähenevät kovasti kesää kohti... Voi käyttää kesän Ohj2-kurssin ohjauksia.
vähintään kaksi lomaketta (eli erillistä jsp-sivua, vrt. malli, saa tehdä myös Vaadin-kehittimellä) toinen koko datan näyttämiseksi ja toinen esim. yksittäisen alkion editoimiseksi (lisääminen/muokkaus)
kommentoi arvauksia siitä missä lukkoja tarvittaisiin
oikeellisuustarkistukset GET ja POST- parametreille
kommentit (ja sanotaan kommenteissa jos synkronointi tekemättä)
(poikkeuskäsittely)
tiedostot files.txt:n avulla kuten harjoitustyökin.
palautusta varten tiedostot kuten varsinaisellakin kurssilla
lisäksi erittäin mielellään palvelin auki jonnekin. Mikroluokista osa on muutettu niin, että niistä voi jättää palvelimen auki porttiin 8080 (?) ja sitten teille on profiilia muutettu (?) niin, että työaseman voi lukita siksi aikaa kun työtä käy näyttämässä ohjaajalle. Siis näyttöä varten:
- Tee files.txt kuten ohj2-kurssilla ja tiedostot versionhallintaan ja nettiin
- Käynnistä kotona tai mikroluokassa palvelin
- Testaa viereisessä koneessa jotta palvelin toimii. Kirjoita ylös tarvittava URL.
- Lukitse palvelinkone.
- Tule näyttämään työtäsi.
tarvittaessa porttia voi vaihtaa etsimällä jonoa:
port="8080"
serverin Serverin server.xml -tiedostosta ja vaihtamalla siihen haluamansa portin.ongelmia HT:n kanssa
- data-tiedostoja ei löydy. Käynnistä Eclipse tiedostojen hakemistossa. Tai vaihda serverin käynnistyshakemistoksi data-hakemistosi
Run/Run configurations.../Apache Tomcat/Tomcat...Server/Arguments/ruksi Other/kirjoita data-hakemiston polku
- valittaa ali.jarista. Lisää Ali.jar J2EE riippuvuuksiin
2 Esimerkki mitä tapahtuu jos syötettä ei tarkisteta
2.1 Talletusmuodon virheet
Mitä tapahtuu jos nimeen tai muuhun kenttän syötetään vaikka Ankka|Aku???
2.2 SQL injection
Ks: SQL injection Wikistä
Oletetaan että jsp-sivulla on hakukentta nimihakua varten. Käyttäjä kirjoittaa kenttaan esim: kalle
Koodissa hakukentän arvo on luettu muuttujaan hakukentta Sitten kutsutaan tietokantaa:
tulos = kanta.query("select * from jasenet where nimi = \""+hakukentta+"\";");
Tämä tuottaa tietokantaan kyselyn:
select * from jasenet where nimi = "kalle";
Mutta jos ilkeämielinen käyttäjä kirjoittaakin hakuehdoksi:
kissa"; delete from jasenet; select * from jasenet where nimi = "
niin tietokantaan meneekin komennot:
select * from jasenet where nimi = "kissa";
delete from jasenet;
select * from jasenet where nimi = "";
eli koko jasenet-taulun sisältö tuhotaan.
Tämän vuoksi syötteet on aina tarkistettava tällaisten väärinkäytösten varalta. Esim. poistetaan syötteestä kaikki lainausmerkit.
2.3 JavaScriptin syöttäminen
Toinen väärinkäytös on päästää syötteeseen JavaScriptiä. Jos JS pääsee läpi käyttäjä voi luoda lomakkeen jossa kysytään esim. salasanoja ja ne toimitetaan sitten paikkaan johon ne eivät kuuluisi.
Kokeile vaikka syöttää nimi-kenttään:
" /><script type="text/javascript">alert("Vesa was here")</script>
3 Esimerkki synkronoinnista
Jasenet.java
=============
private Object locklkm = new Object(); // ei tarvii olla static koska tämä lukko on
// nyt jasenet-kohtainen
/**
* Lisää uuden jäsenen tietorakenteeseen. Ottaa jäsenen omistukseensa.
* @param jasen lisätäävän jäsenen viite. Huom tietorakenne muuttuu omistajaksi
* @throws SailoException jos tietorakennen on jo täynnä
*/
public void lisaa(Jasen jasen) throws SailoException {
synchronized (locklkm) {
if ( lkm >= alkiot.length ) throw new SailoException("Liikaa alkioita");
alkiot[lkm] = jasen;
lkm++;
}
muutettu = true;
}
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.