The Guardian

Latest news, sport, business, comment, analysis and reviews from the Guardian, the world's leading liberal voice

Middle East crisis live: Rubio says US-Iran agreement ‘pretty solid’ as oil price falls amid optimism for deal

Secretary of state says a deal could materialise ‘today’, while Trump says talks with Iran proceeding constructively as he faces criticism from within his own party

Iran executed a man over charges related to the anti-government protests that took place nationwide in January, state media reported on Monday.

The individual was identified as Abbas Akbari, Reuters cited state media as saying.

Continue reading...

About 20 people injured after man sprays unknown substance near ATM in Tokyo mall

A road in the shopping district of Ginza was blocked off and people were taken away in stretchers

About 20 people were injured at a luxury shopping complex in central Tokyo on Monday after a man sprayed a substance inside the building, officials in Japan said.

A Tokyo police spokesperson said a man sprayed a substance at an ATM on the ground floor, while a local fire department official said “around 20 people were injured” after a report of a “smell”.

Continue reading...

Venezuela inmates occupy prison roof and set fire to mattresses to protest alleged abuses

Inmates at Barinas prison allege they were peacefully protesting when prison staff opened fire, leaving some wounded

Inmates at Venezuela’s western Barinas prison staged a protest on its roof on Sunday, piling flaming mattresses and calling for the removal of the facility’s director, who they accused of overseeing guards as they shot unarmed prisoners.

“We want justice. They are shooting us, the guards and the wardens,” a prisoner said in a video shared by the Venezuelan Observatory of Prisons, a local NGO, on X, in which a man is seen with a bullet wound in his chest.

Continue reading...

Rijnmond - Nieuws

Het laatste nieuws van vandaag over Rotterdam, Feyenoord, het verkeer en het weer in de regio Rijnmond

Nieuw Feyenoord-stadion stond al op losse schroeven, maar de plannen liepen maandenlang door

Terwijl binnen Feyenoord de seinen voor een nieuw stadion al op rood stonden, draaide de bestuurlijke machine rond Feyenoord City nog maanden door. Er werd vergaderd over financiering, grondexploitatie, landaanwinning en alternatieve plannen, terwijl steeds duidelijker werd dat de club zelf afstand nam van het stadionplan.

Scorpionfly, Mount Compass, full story at https://naturallysouthaustralia.com

Naturallysouthaustralia.com has added a photo to the pool:

Scorpionfly, Mount Compass, full story at https://naturallysouthaustralia.com

Sacred kingfishers

bpanneman has added a photo to the pool:

Sacred kingfishers

The Daily WTF

Curious Perversions in Information Technology

CodeSOD: Classic WTF: One-and-a-Half-Tiered Application Design

It's a holiday in the US today, so we're reaching back into the archives. What we really need is a single function that can do it all, and by "it" we mean "ruin your life." Original --Remy

There are several types of bad code; there's lazy code, frantic code, unaware-of-a-better-way code, and aware-of-a-better-way-but-too-apathetic-to-do-it code, to name a few. Then there're amalgamations of different types of bad code.

Môshe encountered such an amalgam when his company was trying out a new delivery service. Môshe spent some time evaluating the IE-only web interface, and was curious about some JavaScript errors he was getting. Strangely, he noticed variables named dateSQL, newSQLTag, and modeSQL.

Môshe dug a little deeper, probably thinking that his suspicions couldn't possibly be correct, only to find sendLinkVal() in the page's code:

function sendLinkVal(theDate,theStatus,MainTitle,PageTitle){
  var dateSQL = " AND J.JBDeliveryDate=''" + theDate + 
    "''"
  var status = ""
  var newSQLTag =""
  var PageTitle = PageTitle
  var MainTitle = MainTitle
    //alert(dateSQL)
      switch (theStatus){
        case "Confirmed":
          dateSQL= "" 
          var modeSQL = ""
          modeSQL = " AND (J.JBCompanyID=31337) "
          status = " GlobalJobStatusView AS J WHERE J.JBCollectDate=''
	    " + theDate + "'' AND J.JBConfirmed=''Yes'' AND 
	    J.MIStatusCode<>5" + modeSQL + " AND 
	    (ISNULL(J.JBCancelled, 0) <> 1) ORDER BY 
	    Convert(int, J.MIJobID)"
        break;
        case "Unconfirmed": 
          dateSQL= ""
          var modeSQL = ""
          modeSQL = " AND (J.JBCompanyID=31337) " 
          status = " GlobalJobStatusView AS J WHERE J.JBCollectDate=''
	    " + theDate + "'' AND J.JBConfirmed=''No''" + 
	    modeSQL + " ORDER BY Convert(int, J.MIJobID)"
        break;
        case "Complete":
          dateSQL= ""
          var modeSQL = ""
          modeSQL = " AND (J.JBCompanyID=31337) " 
          status = " GlobalJobStatusView AS J WHERE J.JBCollectDate=''
	    " + theDate + "'' AND J.MIStatusCode=5" + 
	    modeSQL + " ORDER BY Convert(int, J.MIJobID)"
        break;
        case "Unconformed": 
          dateSQL= ""
          var modeSQL = ""
          modeSQL = " AND (J.JBCompanyID=31337) " 
          status = " GlobalJobStatusView AS J WHERE J.JBCollectDate=''
	    " + theDate + "'' AND (J.MIConformance IS NOT NULL 
	    AND J.MIConformance<>'''') " + modeSQL + " 
	    ORDER BY Convert(int, J.MIJobID)"
        break;
        case "NoDelDate":
          dateSQL= ""
          var modeSQL = ""
          modeSQL = " AND (J.JBCompanyID=31337) " 
          dateSQL =" GlobalJobStatusView AS J WHERE J.JBDeliveryDate 
	    IS NULL " + modeSQL + " ORDER BY Convert(int, J.MIJobID)
	    "
        break;
        case "Collections":
          // the dateSQL is not required so set it to nothing so that it 
          // doesn't interfere with the sql being generated at the end of 
          // the function.
          dateSQL= "" 
          var modeSQL = ""
          modeSQL = " AND (J.JBCompanyID=31337) "
          status = " GlobalJobStatusView AS J WHERE J.JBCollectDate=''
	    " + theDate + "''" + modeSQL + " ORDER BY 
	    Convert(int, J.MIJobID)"
        break;
        case "Deliveries":
          // the dateSQL is not required so set it to nothing so that it 
          // doesn't interfere with the sql being generated at the end of 
          // the function.
          dateSQL= "" 
          var modeSQL = ""
          modeSQL = " AND (J.JBCompanyID=31337) "
          status = " GlobalJobStatusView AS J WHERE J.JBDeliveryDate=''
	    " + theDate + "''" + modeSQL + " ORDER BY 
	    Convert(int, J.MIJobID)"
        break;
        case "ColAndDel":
          // the dateSQL is not required so set it to nothing so that it 
          // doesn't interfere with the sql being generated at the end of 
          // the function.
          dateSQL= "" 
          var modeSQL = ""
          modeSQL = " AND (J.JBCompanyID=31337) "
          status = " GlobalJobStatusView AS J WHERE ((J.JBDeliveryDate=''
	    " + theDate + "'') OR (J.JBCollectDate=''" + 
	    theDate + "''))" + modeSQL + " ORDER BY 
	    Convert(int, J.MIJobID)"
        break;
        case "Subcontractor":
          // the dateSQL is not required so set it to nothing so that it 
          // doesn't interfere with the sql being generated at the end of 
          // the function.
          dateSQL= "" 
          var modeSQL = ""
          modeSQL = " AND (J.JBCompanyID=31337) "
          status = " JobAndLoadView AS J WHERE (J.JBDeliveryDate=''
	    " + theDate + "'') " + modeSQL + " 
	    ORDER BY Convert(int, J.MIJobID)"
        break;
        case "Cancelled":
          // the dateSQL is not required so set it to nothing so that it 
          // doesn't interfere with the sql being generated at the end of 
          // the function.
          dateSQL= "" 
          var modeSQL = ""
          modeSQL = " AND (J.JBCompanyID=31337) "
          status = " GlobalJobStatusView AS J WHERE (J.JBCollectDate==''
	    " + theDate + "'') " + modeSQL + " AND 
	    ISNULL(J.JBCancelled, 0) = 1 ORDER BY Convert(int, J.MIJobID)"
        break;
        default : status ="";
      }
        newSQLTag = dateSQL + status;
        document.all.hiddenForm.linkVal.value = newSQLTag;
        document.all.hiddenForm.PageTitle.value = PageTitle
        document.all.hiddenForm.MainTitle.value = MainTitle
        document.all.hiddenForm.submit();  
    //alert(newSQLTag)
  }

Môshe could replace his customer ID with any other and access customer data, and for that matter, to modify or delete whatever he wanted. He could add or remove columns to tables. He could possibly even change permissions, add his own database user and deny all other users access.

Shocked, Môshe called the delivery service, who got him in touch with the developer of the system. This developer was equally shocked to learn that it was even possible to view a web page's JavaScript code, let alone that his architecture was open to SQL injection attacks from virtually any angle. He took immediate and decisive action; all queries were moved to the .NET backend.

Of course, the queries still didn't use parameters and are therefore still open to SQL injection, but now it takes slightly more effort to hack.

[Advertisement] Keep the plebs out of prod. Restrict NuGet feed privileges with ProGet. Learn more.

Trouw geeft laatste trap na aan Ephimenco

Kijk dát je afscheid neemt van een tegendraadse bijna zeventigjarige columnist is natuurlijk dikke prima, en dat het is omdat je hem, zijn denkbeelden of z'n schrijfsels niet meer pruimt ook. Voorts behoren wij niet tot de groep die jankt dat we Trouw niet meer gaan lezen nu Ephimenco er niet meer in staat - we lazen Trouw sowieso al niet. Maar de manier waarop Ephimenco door glibberige gluiper Smouter en diens oma eruit is gewerkt is voor iemand die als hij klaarkomt heel hard 'CONSTRUCTIEVE JOURNALISTIEK!' roept wel tamelijk brisant: middels de bij DPG gekende publieke afrekening. Eerst de brieven, dan een openbare 'Vergeef ons Lezers, want Wij hebben Gezondigd', dan de ombudsman. En nu is er nog een soort eulogie, in de vorm van een aanklacht. Daarin lezen we wat gesputter over 'de feiten', een laatste trap na richting Ephimenco en het gebruik van het woord 'meerstemmig' in het kader van 'een verscheidenheid van inzichten'. In Trouw ja. Waarschijnlijk geloven ze het zelf.

Wel.nl

Minder lezen, Meer weten.

Olie en gas aanzienlijk goedkoper door hoop op akkoord VS-Iran

AMSTERDAM (ANP/BLOOMBERG) - Door de hoop op vrede in het Midden-Oosten laten zowel de olie- als de gasprijzen maandagochtend stevige dalingen zien. De Verenigde Staten en Iran lijken na berichten van afgelopen weekend namelijk heel dicht bij een nieuw akkoord.

Amerikaanse olie werd maandagochtend tot bijna 6 procent goedkoper, terwijl Brent - de maatstaf voor olie uit onder meer het Midden-Oosten - dik 5 procent in prijs omlaag ging. De Europese gasprijs zakte kort na opening van de handel op de gasbeurs in Amsterdam rond de 6 procent.

Bij een deal tussen Iran en de VS wordt de Straat van Hormuz als het goed is heropend. Die voor de olie- en gasleveringen belangrijke zeestraat bij Iran is inmiddels al maanden vrijwel volledig geblokkeerd. Slechts af en toe varen er schepen doorheen.

Maar de Amerikaanse president Donald Trump heeft gewaarschuwd dat de blokkade van de Straat van Hormuz van kracht blijft totdat er echt een overeenkomst is bereikt. Hij wil niet "haasten" met een deal, die "nog niet eens volledig is uitonderhandeld".


Jair Ferwerda was ooggetuige toen de keurige Mona voor het eerst Caroline ontmoeten in haar smerige huis

Jair Ferwerda weet behoorlijk veel van BBB-voorvrouw Caroline van der Plas. Drie jaar geleden maakte Jaïr een documentaire over haar politieke partij en daardoor heeft hij Caroline van dichtbij meegemaakt. “Voor een Videoland-documentaire nam Caroline van der Plas van de BBB mij, augustus 2023, in vertrouwen: ik heb een premierskandidaat op het oog!”

“Caroline woont in een rijtjeshuis in Deventer, rookt en is een sloddervos. Mona is een propere Volendamse en háát roken. Een groter contrast bestaat niet. Dus Caroline pakt de zwabber en begint haar huis aan te vegen. Overal liggen nog brokken van de hond die al een half jaar was vertrokken op de grond.”

En dan? “Dan komt Mona aan, de deur gaat open en je ziet in haar ogen: in wat voor leven ben ik nu weer beland?! Nou, de rest is geschiedenis. De campagne werd een downfall.”