<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yusuke Suda</title>
    <description>The latest articles on DEV Community by Yusuke Suda (@listingworks).</description>
    <link>https://dev.to/listingworks</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4197334%2F96f931fa-91f5-4cd2-a87c-d32c83546083.png</url>
      <title>DEV Community: Yusuke Suda</title>
      <link>https://dev.to/listingworks</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/listingworks"/>
    <language>en</language>
    <item>
      <title>PHP2Shell (CVE-2026-109618/109619): a 10-minute checklist for site owners</title>
      <dc:creator>Yusuke Suda</dc:creator>
      <pubDate>Thu, 22 Oct 2026 07:30:11 +0000</pubDate>
      <link>https://dev.to/listingworks/php2shell-cve-2026-109618109619-a-10-minute-checklist-for-site-owners-1kk7</link>
      <guid>https://dev.to/listingworks/php2shell-cve-2026-109618109619-a-10-minute-checklist-for-site-owners-1kk7</guid>
      <description>&lt;p&gt;On 21 October 2026 the PHP project shipped an emergency security release for two critical remote-code-execution bugs, CVE-2026-109618 and CVE-2026-109619, nicknamed "PHP2Shell". A working exploit exists and, according to reports, a single unauthenticated request can trigger it before any application code runs. This is a plain checklist of what to do, collected from the public advisories listed at the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Know the fixed versions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Branch&lt;/th&gt;
&lt;th&gt;Fixed in&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;8.5&lt;/td&gt;
&lt;td&gt;8.5.12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8.4&lt;/td&gt;
&lt;td&gt;8.4.27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8.3&lt;/td&gt;
&lt;td&gt;8.3.36&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8.2&lt;/td&gt;
&lt;td&gt;8.2.35&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8.1 and older&lt;/td&gt;
&lt;td&gt;no official release; source backports exist for 7.4, 8.0 and 8.1, otherwise ask your vendor or upgrade&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every PHP installation that serves web requests is in scope (PHP-FPM, Apache with mod_php, CGI, FrankenPHP, LiteSpeed). Setups using mod_php are described as the most exposed.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Find out what you are running
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WordPress:&lt;/strong&gt; Tools → Site Health → Info → Server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shell access:&lt;/strong&gt; &lt;code&gt;php -v&lt;/code&gt; (and check the version your web server actually uses, which can differ from the CLI).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caveat:&lt;/strong&gt; Linux distributions often backport fixes without changing the version number. An older-looking number is not proof you are unpatched; check your distribution's or host's security notice.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Act according to how you host
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Managed WordPress hosting:&lt;/strong&gt; look for your host's status page or e-mail confirming the patch. Usually nothing to do.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared hosting:&lt;/strong&gt; ask your host directly whether the 21 October release is applied. If your PHP selector shows 8.1 or older, move to 8.2+.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VPS / self-managed:&lt;/strong&gt; install your distribution's updated PHP packages now and restart PHP-FPM / the web server so every worker runs the fixed build. Remi repository users were advised that updates would not be available on release day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Behind Cloudflare:&lt;/strong&gt; Cloudflare deployed WAF rules for known vectors. Check they are set to block, not log. Treat this as a stop-gap, not a fix.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stuck on 8.1 or older:&lt;/strong&gt; take a full backup, test 8.2+ on a staging copy, then switch.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  4. If you cannot patch today
&lt;/h2&gt;

&lt;p&gt;Advisories mention disabling &lt;code&gt;session.upload_progress.enabled&lt;/code&gt; as an interim measure against one vector of CVE-2026-109619, and the UK NCSC recommends taking systems offline if they cannot be fixed promptly. Only the update is a complete fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Help Net Security: &lt;a href="https://www.helpnetsecurity.com/2026/10/21/php2shell-php-vulnerabilities-patched-cve-2026-109618-cve-2026-109619/" rel="noopener noreferrer"&gt;https://www.helpnetsecurity.com/2026/10/21/php2shell-php-vulnerabilities-patched-cve-2026-109618-cve-2026-109619/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Codeable (WordPress guidance): &lt;a href="https://www.codeable.io/blog/php-vulnerability-cve-2026-109618/" rel="noopener noreferrer"&gt;https://www.codeable.io/blog/php-vulnerability-cve-2026-109618/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;IPA (Japan) alert: &lt;a href="https://www.ipa.go.jp/security/security-alert/2026/pre-alert20261021.html" rel="noopener noreferrer"&gt;https://www.ipa.go.jp/security/security-alert/2026/pre-alert20261021.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Written by listingworks, a small data service in Yokohama. Facts as of 22 October 2026; check the advisories above for updates.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>php</category>
      <category>wordpress</category>
      <category>webdev</category>
    </item>
    <item>
      <title>What nine job and property sites were advertising in mid-October 2026</title>
      <dc:creator>Yusuke Suda</dc:creator>
      <pubDate>Wed, 21 Oct 2026 07:28:55 +0000</pubDate>
      <link>https://dev.to/listingworks/what-nine-job-and-property-sites-were-advertising-in-mid-october-2026-13le</link>
      <guid>https://dev.to/listingworks/what-nine-job-and-property-sites-were-advertising-in-mid-october-2026-13le</guid>
      <description>&lt;p&gt;&lt;em&gt;One-day snapshots from public list pages in the UK, Denmark, Croatia, Latvia, Pakistan, Luxembourg, Spain, India and Slovakia — counts and medians only, no personal data.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Official labour and housing statistics arrive weeks or months after the fact. The listing sites themselves update every hour. At listingworks I read the public list pages of job boards and property portals every day and turn them into small aggregate tables: how many postings or listings there are by region, and what pay or price they advertise. This is what nine of those sites showed on &lt;strong&gt;15 October 2026&lt;/strong&gt; (all reads between 07:52 and 08:08 UTC).&lt;/p&gt;

&lt;p&gt;Two cautions before the numbers. First, these are &lt;strong&gt;samples of the first N listings each search returned&lt;/strong&gt;, not counts of the whole market; where the site publishes its own total I give it next to the sample. Second, pay and prices are &lt;strong&gt;advertised lower bounds&lt;/strong&gt;, only from postings that state them, and medians are shown only where at least five values exist. Nothing here comes from a posting page, an employer name, or a contact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jobs: postings by region and advertised pay
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Site (country)&lt;/th&gt;
&lt;th&gt;Postings read&lt;/th&gt;
&lt;th&gt;Site's own total&lt;/th&gt;
&lt;th&gt;Largest regions in the sample&lt;/th&gt;
&lt;th&gt;Median advertised pay (lower bound)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;reed.co.uk (UK)&lt;/td&gt;
&lt;td&gt;3,000 newest&lt;/td&gt;
&lt;td&gt;99,651 live&lt;/td&gt;
&lt;td&gt;South East 635 · London 564 · North West 358&lt;/td&gt;
&lt;td&gt;London GBP 35,500/yr · South East GBP 35,000 · North West GBP 32,000 (2,163 of 3,000 state pay)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;jobindex.dk (DK)&lt;/td&gt;
&lt;td&gt;732&lt;/td&gt;
&lt;td&gt;~19,000 live&lt;/td&gt;
&lt;td&gt;Hovedstaden 246 · Syddanmark 130 · Midtjylland 129&lt;/td&gt;
&lt;td&gt;not shown on list pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cv.lv (LV)&lt;/td&gt;
&lt;td&gt;2,173&lt;/td&gt;
&lt;td&gt;2,174&lt;/td&gt;
&lt;td&gt;Rīga 1,631 · Pierīga 192 · Zemgale 82&lt;/td&gt;
&lt;td&gt;Rīga EUR 2,000/mo · Pierīga EUR 1,950 · Zemgale EUR 1,800 (2,139 state pay)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mojposao.hr (HR)&lt;/td&gt;
&lt;td&gt;1,595&lt;/td&gt;
&lt;td&gt;1,595&lt;/td&gt;
&lt;td&gt;Grad Zagreb 902 · Zagrebačka 129 · Splitsko-dalmatinska 122&lt;/td&gt;
&lt;td&gt;Grad Zagreb EUR 1,400 · Zagrebačka EUR 1,430 · Splitsko-dalmatinska EUR 1,592 (195 state pay; period not given)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;posao.hr (HR)&lt;/td&gt;
&lt;td&gt;2,000 (cap)&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Grad Zagreb 376 · Istarska 174 · abroad 166&lt;/td&gt;
&lt;td&gt;not shown on list pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rozee.pk (PK)&lt;/td&gt;
&lt;td&gt;3,000&lt;/td&gt;
&lt;td&gt;10,169&lt;/td&gt;
&lt;td&gt;Lahore 811 · Karachi 777 · Islamabad 433&lt;/td&gt;
&lt;td&gt;Lahore PKR 62,500/mo · Islamabad PKR 50,000 · Karachi PKR 46,800 (168 state pay)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three things stand out. Latvia is the only market in this set where almost every posting states pay (98%), because cv.lv requires it; the UK is next at 72% of the newest postings; Pakistan is at 6%. Denmark's jobindex.dk lists no pay at all on its search pages, which is why Danish pay statistics have to come from elsewhere. And in both Croatian boards Zagreb carries more than half of the volume on mojposao.hr (57%) but only 19% on posao.hr, which lists more seasonal coastal and foreign work — the two boards are not interchangeable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Property: asking prices by city
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Site (country)&lt;/th&gt;
&lt;th&gt;Listings read&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Median asking price (sale)&lt;/th&gt;
&lt;th&gt;Median asking rent (month)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;pisos.com (ES)&lt;/td&gt;
&lt;td&gt;3,000 sale + 3,000 rent&lt;/td&gt;
&lt;td&gt;10 provinces, 300 newest each&lt;/td&gt;
&lt;td&gt;Madrid EUR 306,000 (EUR 3,547/m²) · Barcelona EUR 312,500 (EUR 3,295/m²) · Málaga EUR 465,000 (EUR 4,000/m²)&lt;/td&gt;
&lt;td&gt;Madrid EUR 1,400 · Barcelona EUR 1,750 · Málaga EUR 1,800&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;athome.lu (LU)&lt;/td&gt;
&lt;td&gt;1,588 sale + 540 rent&lt;/td&gt;
&lt;td&gt;10 largest communes, 200 each&lt;/td&gt;
&lt;td&gt;Luxembourg City EUR 762,167 (EUR 11,194/m²) · Esch-sur-Alzette EUR 495,000 (EUR 7,142/m²) · Differdange EUR 570,000 (EUR 6,951/m²)&lt;/td&gt;
&lt;td&gt;Luxembourg City EUR 1,800 · Esch-sur-Alzette EUR 700&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;nobroker.in (IN, rent only)&lt;/td&gt;
&lt;td&gt;2,471&lt;/td&gt;
&lt;td&gt;~500 each in Bengaluru, Mumbai, Pune, Chennai, Hyderabad&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Mumbai INR 42,000 (INR 781/m²) · Hyderabad INR 32,500 · Bengaluru INR 30,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Málaga's newest listings ask more than Madrid's or Barcelona's, both in total and per square metre — the sample is the 300 newest per province, so this says something about what is coming onto the market now rather than about the stock. Luxembourg City asks 11,194 euros per square metre, three times Madrid. In India, Mumbai's rent per square metre is 2.4 times Bengaluru's even though the headline rents differ by only 40%: Mumbai flats in the sample are far smaller.&lt;/p&gt;

&lt;h2&gt;
  
  
  Used cars: one weekend on auto.bazos.sk (Slovakia)
&lt;/h2&gt;

&lt;p&gt;5,717 car ads were listed or bumped on 14–15 October, at most 400 per make section (six sections hit the cap). By region: Nitriansky 950, Banskobystrický 772, Prešovský 719. Median asking price for the three largest makes: Škoda EUR 14,990, Volkswagen EUR 14,000, BMW EUR 11,700. Bazos list pages show no year or mileage, so those medians are empty.&lt;/p&gt;

&lt;h2&gt;
  
  
  How these tables are made
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sources&lt;/strong&gt;: public list (search) pages only. Posting and ad pages are never opened.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regions&lt;/strong&gt;: the place as the site writes it, mapped with a small table per country (UK: 12 ITL1 regions; DK: 5 regioner; HR: 21 counties + abroad; LV: 6 regions, approximate; PK: 10 largest cities + other; SK: 8 kraje). A posting with several places counts under the first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Job categories&lt;/strong&gt; (in the per-category files): 13 groups by keywords in the title, first match wins. Approximate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pay and prices&lt;/strong&gt;: lower bound of what the posting states; units and currencies are never mixed; price per m² = price / living area.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No personal data&lt;/strong&gt;: employer and seller names are not in the tables at all. Where a scraper does return a company field, names that look like a person are blanked.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get the data
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The same tables, every day or every week, for one site or a bundle: &lt;strong&gt;&lt;a href="https://www.listingworks.net/notes" rel="noopener noreferrer"&gt;listingworks.net&lt;/a&gt;&lt;/strong&gt; (aggregate subscriptions from USD 99 a month; one-off extracts USD 49).&lt;/li&gt;
&lt;li&gt;Run it yourself: the scrapers and the country statistics Actors behind these tables are on Apify Store at &lt;strong&gt;&lt;a href="https://apify.com/listingworks" rel="noopener noreferrer"&gt;apify.com/listingworks&lt;/a&gt;&lt;/strong&gt; (pay per result, about USD 1.50 per 1,000 rows; the statistics Actors return one row per region or category).&lt;/li&gt;
&lt;li&gt;Free sample dataset (Poland, daily, CC BY 4.0): Kaggle and Hugging Face, user &lt;code&gt;listingworks&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next week's snapshot will add the same tables for Poland, Serbia and the Czech Republic, with week-on-week changes.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Yusuke Suda, listingworks (Yokohama). Figures read 15 October 2026. Corrections welcome by email.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>data</category>
      <category>python</category>
      <category>opensource</category>
      <category>career</category>
    </item>
  </channel>
</rss>
