wiki:JspHarkka
Last modified 20 months ago Last modified on 2016-04-27 11:33:45

Tämä sivu on siirretty TIMiin.


JSP harjoitustyö

1. Harjoitustyön vaatimukset

Katso myös JSP ja Eclipse ja Harjoitustyön teko-ohjeet

Valmis: toukokuun loppuun mennessä, ohjausajat vähenevät kovasti kohti kuun loppua...

  • 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:
    1. Tee files.txt kuten ohj2-kurssilla ja tiedostot versionhallintaan ja nettiin
    2. Käynnistä kotona tai mikroluokassa palvelin
    3. Testaa viereisessä koneessa jotta palvelin toimii. Kirjoita ylös tarvittava URL.
    4. Lukitse palvelinkone.
    5. 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;
  }