/var/log/balo

Permission denied to call method PandorasBox.open

Proper JSON output with JAX-RS

10 Mar 2013

I had to develop a REST webservice endpoint recently in our JavaEE application. After we figured out what data the client needs we came to an agreement that we will produce JSON output. I knew JAX-RS can do that, so I simply wrote a method like this:

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/get/{param1}/{param2}")
public List<ApprovedEntrant> getEntrants(
            @PathParam("param1") final String param1,
            @PathParam("param2") final String param2) {

     final List<ApprovedEntrant> entrants = new LinkedList<ApprovedEntrant>();

     // put elements in the list

     return entrants;
}

It seems to work as expected but sometimes we noticed weird results with the default JSON serialization of JAX-RS in Glassfish 3 (maybe Jersey?):

  • in case of an empty list (!), it produces "null" string output
  • if the list contains only one element, the result is the element in JSON object, instead of a JSON array with one element

Of course, I could import the official JSON Java library and do some toString() or object transform tricks, but I don’t want to introduce another dependency in my widely used domain project. I want to solve it in the webservice layer, without manual object / list JSON transformations. After some research I found the Jackson project which has a smarter JAX-RS JSON provider.

First, I added the new dependency to my webservice project:

<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.1.4</version>
</dependency>

Then I had to modify my code a bit, but I think quite general and doesn’t contain ugly JSON objects and arrays.

private static ObjectMapper mapper = new ObjectMapper();

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/get/{param1}/{param2}")
public String getEntrants(
            @PathParam("param1") final String param1,
            @PathParam("param2") final String param2) {

     final List<ApprovedEntrant> entrants = new LinkedList<ApprovedEntrant>();

     // put elements in the list

     String out = "";
     try {
         out = mapper.writeValueAsString(entrants);
     } catch (JsonProcessingException ex) {
         //error handling
     }

     return out;
}
Facebook Twitter Google+
Tags: coding, english, java, jax-rs, json, rest, and webservice

Trükkös facebook spam - böngésző kiterjesztéssel

04 Aug 2012

Általában nem írnék meg egy erről szóló bejegyzést, mert minden bokorban terem már egy valamilyen módon spamelő vagy kémkedő alkalmazás. Egy ismerősöm azzal keresett meg, hogy spam üzenetek jelennek meg a falán, amikben random ismerősök vannak betagelve. Gondoltam megint egy spammer facebook alkalmazás, de állította, hogy már minden alkalmazást kitörölt. Nekem is gyanús volt, hogy a feltöltött képek és bejegyzések a saját nevével érkeznek.
Itt még mindig egy primitív dologra gyanakodtam, de amikor jelszóváltoztatás után is érkeztek a bejegyzések már éreztem, hogy itt valami disznóság van, ezért elkezdtem nyomozni :)



A posztban lévő link egy dropbox linkre mutat, ami teljesen leutánozza a youtube kinézetét, azzal a kivétellel, hogy egy plugin telepítését kéri a felhasználótól! Itt már megszólal a vészcsengő egy tapasztaltabb felhasználónál, de a gyanútlan áldozatok rákattintanak. Gondolhatjuk, hogy megint csak egy oldal lájkoló láthatatlan <div>… De nézzük csak meg, hogy mit is csinál ez a link!

(Sajnos erről képernyőképet nem készítettem először, azóta pedig a dropbox letiltotta, mert elérte a forgalmi korlátot. Ha holnap működik még az oldal, akkor frissítem a bejegyzést, addig higgyétek el nekem :-)

Többek között megvizsgálja a böngészőt és letölt egy ennek megfelelő bővítményt (Chrome és Firefox érintett, a többit átirányítja egy másik oldalra).
Kicsit utánajártam a Crome bővítménynek (letölthető itt, Firefox bővítmény itt), egy “YouTube Premium Video” kiterjesztésnek álcázza magát, valód Youtube ikonokkal.
Az analytics (UA-31861921-1) és whois.among.us (3bcmg6ofjwms) statisztikákon kívül még behivatkozik egy, a konkrét spamelést és terjesztést végző javascriptet: http://feedbuzz.info/js.php (ha időközben elérhetetlenné válna, a kimenet letölthető itt)

Hogyan kerüljük el?

  1. Mindig ellenőrizzük a meglátogatott oldalak URL-jét. Itt is feltűnhetett volna, hogy a szokásos youtube.com helyett dl.dropbox.com van.
  2. Gyanakodjunk, ha egy gyakran látogatott, ismert működésű oldal hirtelen valaminek a letöltésére, elvégzésére kér fel.
  3. Csak megbízható forrásból telepítsünk bővítményeket és időnként nézzük őket végig, a már nem használtakat töröljük, tiltsuk le!
  4. Ne higgyünk a kihagyhatatlan, úgy sem tudjuk x másodpercnél tovább nézni, Justin Bieber akasztása (!!!), kígyó megeszik egy embert, egyéb badarságokat kínáló bejegyzéseknek. Ha mégis nagyon érdekel, akkor legyünk gyanakvóak és használjuk a Chrome jobb gomb a linkre -> Megnyitás inkognitó ablakban funkcióját, így legalább a bejelentkezett munkamenetünkhöz nem férnek hozzá.


Tipp: ne csak a kiegészítőket, hanem a beépülőket is ellenőrizzük (Chrome esetében chrome://plugins)! A nem használtakat pedig tiltsuk le (pl. Remoting viewer, Microsoft Office, VLC, Silverlight, Java (!!!))


Megjegyzés1: nem tisztázott, hogy Chrome 21-re hogyan került fel a bővítmény egy idegen oldalról. Chrome 20-ban még felajánlotta, hogy telepítésre kerüljön-e, de a 21-es verzióban figyelmeztet, hogy csak az áruházból telepíthető bővítmény és emiatt elutasításra kerül. Linux alatti Chrome-ra pedig fel sem sikerült telepítenem, mert hibás bővítményt írt. Valaki utánanézhetne pontosan :)

Megjegyzés2: már több helyen is jelentettem a Google felé a támadást, még nem érkezett visszajelzés

Megjegyzés3: nem vagyok elvakult Chrome felhasználó, de mivel ezt a böngészőt ismerem a legjobban, ezért ebből hoztam a példákat. Elképzelhető, hogy a fent említett funkciók a többi böngészőben is elérhetőek.

Frissítés(08.05): a stuff másnak is feltűnt, az érdeklődők az exposedbotnets oldalán további információkat és kódrészleteket találhatnak a kiterjesztéssel kapcsolatban.

Facebook Twitter Google+
Tags: biztonság, böngészők, chrome, facebook, firefox, kiegészítő, plugin, and spam