<?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>jobberBase dev blog &#187; Knowledge Base</title>
	<atom:link href="http://www.jobberbase.com/blog/category/knowledge-base/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jobberbase.com/blog</link>
	<description>jobberBase is an open source job board that helps you set up a jobsite in minutes!</description>
	<lastBuildDate>Wed, 20 Oct 2010 10:22:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Security issue explained + FIX</title>
		<link>http://www.jobberbase.com/blog/06-14-2010/security-issue-explained-fix/</link>
		<comments>http://www.jobberbase.com/blog/06-14-2010/security-issue-explained-fix/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 04:00:22 +0000</pubDate>
		<dc:creator>Filip</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Knowledge Base]]></category>

		<guid isPermaLink="false">http://www.jobberbase.com/blog/?p=89</guid>
		<description><![CDATA[Affected versions: 1.7, 1.8, 1.9
Not affected: latest (1.9.1) and older than 1.7 (I hope nobody&#8217;s still running them!).
&#8211;
The issue
In a nutshell: a typical API request, with data returned as &#8220;js&#8221;, the job publisher&#8217;s email address is revealed, as well as the secret &#8220;auth&#8221; hash used for editing/deleting jobs (without an account). A typical API request:
/api/api.php?action=getJobs&#38;type=0&#38;category=0&#38;count=5&#38;random=1&#38;days_behind=100&#38;response=js
e.g. [...]]]></description>
			<content:encoded><![CDATA[<p>Affected versions: 1.7, 1.8, 1.9<br />
Not affected: latest (1.9.1) and older than 1.7 (I hope nobody&#8217;s still running them!).</p>
<p>&#8211;</p>
<h3>The issue</h3>
<p>In a nutshell: a typical API request, with data returned as &#8220;js&#8221;, the job publisher&#8217;s email address is revealed, as well as the secret &#8220;auth&#8221; hash used for editing/deleting jobs (without an account). A typical API request:<br />
<code>/api/api.php?action=getJobs&amp;type=0&amp;category=0&amp;count=5&amp;random=1&amp;days_behind=100&amp;response=js</code><br />
e.g. <code>http://www.jobberbase.com/api/api.php?action=getJobs&amp;type=0&amp;category=0&amp;count=5&amp;random=1&amp;days_behind=100&amp;response=js</code></p>
<p>Inside the jobs array/JSON, you&#8217;ll see that each job has 2 fields that shouldn&#8217;t be there: auth and poster_email.<br />
*auth* is the auth string used in URLs for editing and deactivating job ads.<br />
*poster_email* is the actual email address of the advertiser.</p>
<p>Bad.</p>
<h3>The fix</h3>
<p>In your _includes/class.Job.php:</p>
<p>a) Search for method ApiGetJobs. On line 501, there should be a while-loop after the big SELECT for jobs. Replace the contents in that while-loop with:<br />
<code>$current_job = new Job($row['id']);<br />
$job = $current_job-&gt;GetInfo();<br />
unset($job['poster_email']);<br />
unset($job['auth']);<br />
$jobs[] = $job;</code></p>
<p>b) Do the same for method ApiGetJobsByCompany (while-loop should be on line 541 after you made the change on 2a).</p>
<p>====</p>
<p>We&#8217;re sorry for not picking this up earlier and we hope your site wasn&#8217;t affected in any way by this breach. </p>
<p>If you have any further questions about this issue or other security concerns, please don&#8217;t hesitate to write back!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jobberbase.com/blog/06-14-2010/security-issue-explained-fix/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Security alert</title>
		<link>http://www.jobberbase.com/blog/04-26-2010/security-alert/</link>
		<comments>http://www.jobberbase.com/blog/04-26-2010/security-alert/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 04:48:50 +0000</pubDate>
		<dc:creator>Filip</dc:creator>
				<category><![CDATA[Knowledge Base]]></category>

		<guid isPermaLink="false">http://www.jobberbase.com/blog/?p=86</guid>
		<description><![CDATA[Later update: skip this and get the fix &#187;
&#8211;
Hi guys,
We discovered a potential security breach in the jobberBase codebase, which would allow an attacker to mess with the database.
This affects versions 1.9, 1.8 and possibly 1.7.
Therefore, if you run a jobberBase site, we ask that you send us an email to hello@jobberbase.com, tell us your [...]]]></description>
			<content:encoded><![CDATA[<p>Later update: <a href="http://www.jobberbase.com/blog/06-14-2010/security-issue-explained-fix/">skip this and get the fix &raquo;</a></p>
<p>&#8211;</p>
<p>Hi guys,</p>
<p>We discovered a potential security breach in the jobberBase codebase, which would allow an attacker to mess with the database.</p>
<p>This affects versions 1.9, 1.8 and possibly 1.7.</p>
<p>Therefore, if you run a jobberBase site, we ask that you send us an email to hello@jobberbase.com, tell us your site&#8217;s URL and prove that you own it. Then, we&#8217;ll tell you what the problem is and offer you several ways to fix it.</p>
<p>We&#8217;ve chosen to tackle this problem like this because it&#8217;s quite sensitive &#8212; a public announcement of the issue could have negative effects on jobberBase-powered sites.</p>
<p>Thank you for your understanding!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jobberbase.com/blog/04-26-2010/security-alert/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Have you found the stats, yet?</title>
		<link>http://www.jobberbase.com/blog/01-29-2008/have-you-found-the-stats-yet/</link>
		<comments>http://www.jobberbase.com/blog/01-29-2008/have-you-found-the-stats-yet/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 11:53:32 +0000</pubDate>
		<dc:creator>Filip</dc:creator>
				<category><![CDATA[Knowledge Base]]></category>

		<guid isPermaLink="false">http://www.jobberbase.com/blog/01-29-2008/have-you-found-the-stats-yet/</guid>
		<description><![CDATA[Stats? What stats?
Well, I&#8217;ve created a page that displays some useful overall information about the site.
Assuming your URL is http://localhost/jobberbase/, the stats can be accessed at http://localhost/jobberbase/stats/.
You probably don&#8217;t want other people to see them, so you might want to protect the page somehow. On jobber.ro, I use an extra param (/stats/EXTRA_PARAM/) based on which [...]]]></description>
			<content:encoded><![CDATA[<p>Stats? What stats?</p>
<p>Well, I&#8217;ve created a page that displays some useful overall information about the site.<br />
Assuming your URL is http://localhost/jobberbase/, the stats can be accessed at <strong>http://localhost/jobberbase/stats/</strong>.</p>
<p>You probably don&#8217;t want other people to see them, so you might want to protect the page somehow. On jobber.ro, I use an extra param (/stats/EXTRA_PARAM/) based on which I perform a basic authentication (if EXTRA_PARAM exists, display page). :p</p>
<h3>What stats are available?</h3>
<ul>
<li>A list of the latest job applications + total no. of apps + maximum apps per day, in the past 30 days + average apps per day, in the past 30 days.</li>
<li>List of performed searches on the site + total no. of searches + max searches per day in the past 30 days + avg apps per day in the past 30 days.</li>
</ul>
<p>On jobber.ro we also track the site widgets, like this:<br />
Whenever someone clicks on a job ad she sees on a 3rd party site (that displays the jobber site widget), we save the referrer. This way, we know EXACTLY how many people actually used the site widget and how popular it is on their sites <img src='http://www.jobberbase.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Metrics is always good!<br />
Enjoy! <img src='http://www.jobberbase.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jobberbase.com/blog/01-29-2008/have-you-found-the-stats-yet/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Database maintenance</title>
		<link>http://www.jobberbase.com/blog/11-03-2007/database-maintenance/</link>
		<comments>http://www.jobberbase.com/blog/11-03-2007/database-maintenance/#comments</comments>
		<pubDate>Sat, 03 Nov 2007 12:50:43 +0000</pubDate>
		<dc:creator>Filip</dc:creator>
				<category><![CDATA[Knowledge Base]]></category>

		<guid isPermaLink="false">http://www.jobberbase.com/blog/11-03-2007/database-maintenance/</guid>
		<description><![CDATA[In the root directory of jobberBase, there&#8217;s a cron_maintenance.php script that you should run with cron (or Task Scheduler, on Windows). On jobber.ro, I have that script running every night.
Default maintenance
For now, what the maintenance script does is delete temporary and inactive job ads.
What else can you do
The standard job-board behavior is to allow an [...]]]></description>
			<content:encoded><![CDATA[<p>In the root directory of jobberBase, there&#8217;s a <strong>cron_maintenance.php</strong> script that you should run with cron (or Task Scheduler, on Windows). On <a href="http://www.jobber.ro/">jobber.ro</a>, I have that script running every night.</p>
<h3>Default maintenance</h3>
<p>For now, what the maintenance script does is delete temporary and inactive job ads.</p>
<h3>What else can you do</h3>
<p>The standard job-board behavior is to allow an ad to be active for a number of days (30, for most of them). If you wish to implement this in your jobberBase-based site, you could use the cron_maintenance.php to deactivate older ads and/or notify publishers with 2-3 days before this deactivation&#8230;</p>
<p>I&#8217;m guessing that an <code>OPTIMIZE TABLE jobs;</code> would also be useful, from time to time <img src='http://www.jobberbase.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jobberbase.com/blog/11-03-2007/database-maintenance/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Missing .htaccess</title>
		<link>http://www.jobberbase.com/blog/10-24-2007/missing-htaccess/</link>
		<comments>http://www.jobberbase.com/blog/10-24-2007/missing-htaccess/#comments</comments>
		<pubDate>Wed, 24 Oct 2007 05:12:27 +0000</pubDate>
		<dc:creator>Filip</dc:creator>
				<category><![CDATA[Knowledge Base]]></category>

		<guid isPermaLink="false">http://www.jobberbase.com/blog/10-24-2007/missing-htaccess/</guid>
		<description><![CDATA[Some people reported they missed the .htaccess file from the downloaded distribution.
If this is you, here are the contents of a .htaccess file you should place in jobberBase root dir (together with index.php and config.php):
RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
ErrorDocument 404 /page-unavailable/
Additionally, I&#8217;ve added a htaccess.txt file in the distribution, so [...]]]></description>
			<content:encoded><![CDATA[<p>Some people reported they missed the .htaccess file from the downloaded distribution.<br />
If this is you, here are the contents of a .htaccess file you should place in jobberBase root dir (together with index.php and config.php):</p>
<p><code>RewriteEngine on<br />
Options +FollowSymlinks</p>
<p>RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
RewriteRule . index.php [L]</p>
<p>ErrorDocument 404 /page-unavailable/</code></p>
<p>Additionally, I&#8217;ve added a <strong>htaccess.txt</strong> file in the distribution, so you can rename it into <strong>.htaccess</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jobberbase.com/blog/10-24-2007/missing-htaccess/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>jobberBase Installation Guide</title>
		<link>http://www.jobberbase.com/blog/10-23-2007/jobberbase-installation-guide/</link>
		<comments>http://www.jobberbase.com/blog/10-23-2007/jobberbase-installation-guide/#comments</comments>
		<pubDate>Tue, 23 Oct 2007 12:01:46 +0000</pubDate>
		<dc:creator>Filip</dc:creator>
				<category><![CDATA[Knowledge Base]]></category>

		<guid isPermaLink="false">http://www.jobberbase.com/blog/10-23-2007/jobberbase-installation-guide/</guid>
		<description><![CDATA[
Download the latest version from jobberBase.com and decompress it.
Make sure you have PHP 5+ (with mysqli extension enabled) and MySQL 4.1+ installed on your server. Also, Apache module mod_rewrite has to be enabled and overriding default settings with .htaccess need to be allowed.
Can you see the .htaccess file in your downloaded files? Make sure it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<ol>
<li>Download the latest version from <a href="http://www.jobberbase.com/">jobberBase.com</a> and decompress it.</li>
<li>Make sure you have PHP 5+ (with <strong>mysqli</strong> extension enabled) and MySQL 4.1+ installed on your server. Also, Apache module <strong>mod_rewrite</strong> has to be enabled and overriding default settings with .htaccess need to be allowed.</li>
<li>Can you see the .htaccess file in your downloaded files? Make sure it&#8217;s there.</li>
<li>Create a new database and import <strong>__db/jobberbase.sql</strong> into it.</li>
<li>Following directories need write permissions:
<ul>
<li><strong>/uploads</strong> (uploaded resumes are temporary stored here)</li>
<li><strong>/_templates/_cache</strong> (smarty cache)</li>
</ul>
</li>
<li>Open <strong>config.php</strong> and update the following constants so they suit your environment:
<ul>
<li>DB_HOST </li>
<li>DB_USER</li>
<li>DB_PASS</li>
<li>DB_NAME</li>
<li>JOBBER_URL</li>
<li>_APP_MAIN_DIR</li>
<li>NOTIFY_EMAIL</li>
<li>ADMIN_EMAIL</li>
<li>SITE_NAME</li>
</ul>
</li>
<li>If you can&#8217;t see the <strong>.htaccess</strong> file or actually don&#8217;t have it, rename <strong>htaccess.txt</strong> into <strong>.htaccess</strong>.</li>
<li>If your host doesn&#8217;t offer the <strong>mysqli</strong> PHP extension (find out from phpinfo()), you can use a <strong>mysql</strong> wrapper instead.<br />
Open <strong>config.php</strong> and just replace <code>require_once '_includes/class.Db.php'</code> with <code>require_once '_includes/class.Db.MySql.php'</code> (thanks to <a href="http://emil.topweb.ro/">Emil Sirbu</a> for this).</li>
<li>That&#8217;s it, open up a browser and type in the URL (e.g. http://localhost/jobberbase/)!</li>
</ol>
<p>Does this work for you?<br />
Do you have a special environment that needed extra tweaking? Would you like to share?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jobberbase.com/blog/10-23-2007/jobberbase-installation-guide/feed/</wfw:commentRss>
		<slash:comments>129</slash:comments>
		</item>
		<item>
		<title>Posting a job ad</title>
		<link>http://www.jobberbase.com/blog/10-22-2007/posting-a-job-ad/</link>
		<comments>http://www.jobberbase.com/blog/10-22-2007/posting-a-job-ad/#comments</comments>
		<pubDate>Mon, 22 Oct 2007 12:36:31 +0000</pubDate>
		<dc:creator>Filip</dc:creator>
				<category><![CDATA[Knowledge Base]]></category>

		<guid isPermaLink="false">http://www.jobberbase.com/blog/10-22-2007/posting-a-job-ad/</guid>
		<description><![CDATA[Assuming you&#8217;ve installed jobberBase and you&#8217;re ready to start hacking and adjusting it to your needs, you&#8217;ll soon find out the posting a job ad might not work as you first expect it to work.
So let me draw it for you:

And this is what it means:

You post a job ad.
The system checks if there are [...]]]></description>
			<content:encoded><![CDATA[<p>Assuming you&#8217;ve installed jobberBase and you&#8217;re ready to start hacking and adjusting it to your needs, you&#8217;ll soon find out the posting a job ad might not work as you first expect it to work.</p>
<p>So let me draw it for you:</p>
<div><img src='http://www.jobberbase.com/blog/wp-content/uploads/2007/10/post-process.png' alt='' /></div>
<p>And this is what it means:</p>
<ol>
<li>You post a job ad.</li>
<li>The system checks if there are any other ads you&#8217;ve previously posted with the same e-mail address.</li>
<li>If there aren&#8217;t any, your ad goes into &#8220;pending&#8221; mode and the administrator receives an e-mail with this new ad. He has to manually activate it, in order for the ad to be published.</li>
<li>If, however, your address is found in the database, this new ad will be published instantly.</li>
</ol>
<p>I chose this solution because it was very fast to implement and it still is very efficient. Most database administration operations are done directly in phpmyadmin, but others (activate/edit/deactivate) from the e-mails jobberBase sends to the admin.</p>
<p>However, the system is pretty flexible once you get the hang of it.</p>
<p>Have fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jobberbase.com/blog/10-22-2007/posting-a-job-ad/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
	</channel>
</rss>

