<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>file integrity - Matteo Cisilino</title>
	<atom:link href="https://www.cisilino.com/en/tag/file-integrity/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.cisilino.com/en/</link>
	<description>Guide su WordPress, server e sicurezza</description>
	<lastBuildDate>Fri, 30 Oct 2026 16:06:21 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>
	<item>
		<title>Upload monitoring and the integrity check</title>
		<link>https://www.cisilino.com/en/2026/10/30/upload-monitoring-integrity-check/</link>
					<comments>https://www.cisilino.com/en/2026/10/30/upload-monitoring-integrity-check/#respond</comments>
		
		<dc:creator><![CDATA[matteocisilino]]></dc:creator>
		<pubDate>Fri, 30 Oct 2026 16:05:41 +0000</pubDate>
				<category><![CDATA[CSDN manual]]></category>
		<category><![CDATA[Cisilino Site Defense Network]]></category>
		<category><![CDATA[file integrity]]></category>
		<category><![CDATA[uploads]]></category>
		<guid isPermaLink="false">https://www.cisilino.com/?p=1050</guid>

					<description><![CDATA[<p>Where to find the upload monitoring form, what it actually blocks, and how to read the outcome of the plugin's integrity check.</p>
<p>The post <a href="https://www.cisilino.com/en/2026/10/30/upload-monitoring-integrity-check/">Upload monitoring and the integrity check</a> first appeared on <a href="https://www.cisilino.com/en/">Matteo Cisilino</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><strong>Upload monitoring</strong> in the CSDN plugin notes down who uploads files to your site, even outside the media library. The integrity check, on the other hand, verifies that the plugin&#8217;s own files haven&#8217;t been touched. These are two different defences, but both are looking for the same scenario: a malicious file getting in where it shouldn&#8217;t.</p>
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/manuale-csdn-caricamenti-integrita.webp" alt="Diagram of WordPress with the General tab of the plugin CSDN and the upload monitoring section" width="1200" height="630"/></figure>
<h2>Where it is</h2>
<p>Watch out for the location: the form isn&#8217;t in the “Hardening / IDS” tab. Open <strong>Settings &gt; Cisilino Site Defense Network</strong> (point 1), stay on the <strong>General</strong> tab (point 2) and scroll right to the bottom. After the whitelist you&#8217;ll find the “Upload monitoring” section (point 3). The integrity check, instead, is read in the Test tab, covered in the <a href="https://www.cisilino.com/en/?p=980">Test tab</a> chapter.</p>
<h2>What upload monitoring is for</h2>
<p>The section says: “Logs files uploaded to the site, including those that don&#8217;t go through the media library: plugin forms, admin-ajax endpoints, arbitrary uploads from a theme.” That is where most webshells get in. A log that only watches the media library won&#8217;t see them.</p>
<h2>How to use it</h2>
<ol>
<li>Open the General tab and scroll down to “Upload monitoring”.</li>
<li>Check the “Monitoring” row: “Log file uploads”.</li>
<li>Check the “Block executable files” row: “Reject uploads with an executable extension (.php, .phtml, .phar, .sh, .htaccess&#8230;)”.</li>
<li>Click “Save upload monitoring”.</li>
<li>Read the notice: “Upload monitoring settings saved.”.</li>
</ol>
<h2>Log file uploads</h2>
<p>This option is <strong>on</strong> by default. The events go into the “File uploads” group of the activity log. For a request with no file, the cost is nil. The plugin notes every request that contains a file, together with the field and the address that received it. The actions you&#8217;ll see in the log are:</p>
<ul>
<li>“File received in a POST request”.</li>
<li>“File uploaded”.</li>
<li>“WARNING: potentially executable file uploaded”.</li>
<li>“Upload BLOCKED”.</li>
</ul>
<p>The local log holds at most 500 rows, unless you change the cap in the activity log settings. How to read it is explained in the <a href="https://www.cisilino.com/en/?p=984">Activity log</a> chapter.</p>
<h2>Block executable files</h2>
<p>This option is <strong>off</strong> by default. It only works if “Log file uploads” is also on: with monitoring off, the block does nothing, even if its box is ticked. If you turn it on, WordPress rejects the file with the message: “File type not allowed on this site (Cisilino Site Defense Network: executable file upload blocked).” The check also catches double extensions, such as <code>image.php.jpg</code>.</p>
<p>The extensions treated as dangerous are: <code>php</code>, <code>php3</code>, <code>php4</code>, <code>php5</code>, <code>php7</code>, <code>php8</code>, <code>phtml</code>, <code>phps</code>, <code>phar</code>, <code>pht</code>, <code>shtml</code>, <code>cgi</code>, <code>pl</code>, <code>py</code>, <code>rb</code>, <code>sh</code>, <code>bash</code>, <code>htaccess</code>, <code>htpasswd</code>, <code>jsp</code>, <code>asp</code>, <code>aspx</code>, <code>exe</code>, <code>so</code>, <code>dll</code>, <code>ini</code>, <code>svg</code> and <code>svgz</code>.</p>
<p><strong>Warning:</strong> the list also blocks <code>.svg</code>, so SVG logos can no longer be uploaded. It also blocks <code>.ini</code>, <code>.py</code>, <code>.exe</code> and <code>.dll</code>, which turn up in attachments and packages. The plugin looks at every part after the first dot. A name such as <code>archive.pl.zip</code> is therefore rejected. The block only applies to uploads handled by WordPress (the wp_handle_upload_prefilter filter). A plugin that saves the file on its own is logged (“File received in a POST request”) but not stopped. Anyone writing straight to disk, without a request that carries a file, leaves no trace in this log.</p>
<h2>The integrity check</h2>
<p>Unlike upload monitoring, here you aren&#8217;t looking at new uploads but at files already present. The plugin compares the MD5 hashes of its <code>.php</code> files against the ones expected. It looks for files that have been changed, are missing, or have been added. It excludes the <code>tests</code> and <code>dist</code> folders. Files that aren&#8217;t PHP aren&#8217;t checked.</p>
<p>The check runs once a day, through the WordPress scheduling system. On a low-traffic site it can slip. The reference is the <code>checksums.json</code> file in the plugin folder, if present. Otherwise the plugin uses a snapshot of the files taken on activation and on every version change.</p>
<h3>How to read the outcome</h3>
<p>You&#8217;ll find it in the Test tab, in the “Plugin file integrity” box, which also has the “Check now” button to run the check immediately. There are four cases:</p>
<ul>
<li>“No check has run yet.”, if it has never started.</li>
<li>Green box: “All N files checked match. Last check: date.”.</li>
<li>Yellow box: “No reference available: cannot verify. Reactivate the plugin to take a new snapshot of the files.”.</li>
<li>Red box: “WARNING: the plugin&#8217;s files do not match what is expected.”, with three lists: “Changed”, “Missing”, “Unexpected”.</li>
</ul>
<p>At most 15 names appear in each list. If you see red and haven&#8217;t touched the files by hand, the plugin tells you to treat the site as potentially compromised. Reinstall the plugin from a trusted copy and check the rest of the installation.</p>
<p>If the reference is the snapshot, the green box says so. That comparison finds changes made afterwards, not a plugin already compromised at the time of installation.</p>
<p><strong>Warning:</strong> integrity is a detector, not a barrier. Anyone who has already written to the files can also rewrite the hashes or switch off the check. Manual changes, or an upload that stops halfway, produce a red alert.</p>
<h2>What happens behind the scenes</h2>
<p>Upload monitoring and integrity share the same log. The daily check writes to the activity log in only two cases: when it finds a problem, and when, after a problem, things return to normal. When all is well it writes nothing. The log is then sent to the panel, so a copy of the alert sits off your server.</p>
<h2>If something goes wrong</h2>
<p>Upload monitoring stays useful even with blocking switched off. If a legitimate plugin stops uploading files, switch off “Block executable files” and try again. To understand which uploads reach the site, leave monitoring on and check the log. For the rules on files in uploads, see also the <a href="https://www.cisilino.com/en/?p=978">Hardening / IDS</a> chapter.</p>
<p>The risk this is trying to reduce is described by OWASP: read the page on <a href="https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload" target="_blank" rel="noopener">unrestricted file upload</a>, useful for understanding why uploads are a weak point.</p>
<p>Previous chapter: <a href="https://www.cisilino.com/en/?p=978">Hardening / IDS: the rules for .htaccess</a>. Next chapter: <a href="https://www.cisilino.com/en/?p=980">Test tab: checking that the protections work</a>. Index: <a href="https://www.cisilino.com/en/?p=972">introduction to the manual</a>.</p><p>The post <a href="https://www.cisilino.com/en/2026/10/30/upload-monitoring-integrity-check/">Upload monitoring and the integrity check</a> first appeared on <a href="https://www.cisilino.com/en/">Matteo Cisilino</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.cisilino.com/en/2026/10/30/upload-monitoring-integrity-check/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
