<?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/"
xmlns:series="http://organizeseries.com/"
> <channel><title>SitePoint &#187; Web security</title> <atom:link href="http://www.sitepoint.com/category/web-security/feed/" rel="self" type="application/rss+xml" /><link>http://www.sitepoint.com</link> <description>Learn CSS &#124; HTML5 &#124; JavaScript &#124; Wordpress &#124; Tutorials-Web Development &#124; Reference &#124; Books and More</description> <lastBuildDate>Mon, 13 May 2013 13:12:07 +0000</lastBuildDate> <language>en-US</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.5.1</generator> <item><title>Strengthen User Authentication and Preserve User Experience</title><link>http://www.sitepoint.com/strengthen-user-authentication-and-preserve-user-experience/</link> <comments>http://www.sitepoint.com/strengthen-user-authentication-and-preserve-user-experience/#comments</comments> <pubDate>Tue, 07 May 2013 09:25:58 +0000</pubDate> <dc:creator>Roman Yudkin</dc:creator> <category><![CDATA[Mobile]]></category> <category><![CDATA[Web security]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=66050</guid> <description><![CDATA[Veteran web industry security expert Roman Yudkin provides an overview of how to strengthen user authentication processes without diminishing your site visitors' experience.]]></description> <content:encoded><![CDATA[<p></p><p>Alphanumeric passwords have long been the primary method of authentication and access control on the Web. In recent years, however, relying on passwords as the sole method of authentication has proven to be unsustainable and not secure.</p><p><a
href="http://www.verizonenterprise.com/DBIR/2013/">Research</a> shows that authentication-based attacks were used in the majority of major data breaches in 2012. Simply moving beyond passwords to implement stronger forms of user authentication would prevent nearly 80 per cent of hacking attacks on companies.</p><p>Because people often use the same password on multiple websites, a large-scale password leak at one site creates a domino effect that harms security for many other websites and applications. When 1.5 million user credentials were leaked from Gawker Media Group, spammers and hackers immediately used those credentials to access user accounts on other websites. Hundreds of thousands of accounts on Twitter were compromised and used to spread spam and malicious links. Amazon and LinkedIn had to enforce password resets for their entire user communities.</p><p>Such debacles harm not only the individual users whose accounts are compromised; they also harm the organization, website or application itself. The negative repercussions of a data breach can include legal liability, fines, loss of customers, damage to brand reputation, plus the cost of fixing security and IT systems amidst a crisis.<div
id='div-gpt-ad-1328644474660-10' style='width:728px; height:90px;'> <script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1328644474660-10'); });</script> </div></p><p>When hackers stole more than 8 million user passwords from LinkedIn and eHarmony accounts in 2012, LinkedIn <a
href="http://www.securityweek.com/linkedin-breach-cost-1m-says-2-3-million-security-upgrades-coming">estimated</a> it spent more than $1 million to clean up the breach and would need to spend another $2-$3 million for additional security upgrades. In 2011 Sony was forced to <a
href="http://www.cbsnews.com/8301-504083_162-20065621-504083.html">spend</a> more than $170 million to remedy the fallout from a data breach that leaked more than 100 million PlayStation passwords.</p><p>Mobile developers must also consider better authentication methods. The majority of smartphone and tablet owners <a
href="http://www.confidenttechnologies.com/news_events/survey-shows-smartphone-users-choose-convenience-over-security">do not password protect their devices</a>, despite having them connected to sensitive applications including work networks and banking applications. Users do that because typing passwords to log into mobile apps is too cumbersome. Experts at the CTIA Wireless conference even <a
href="http://www.mobilemarketer.com/cms/news/commerce/11217.html">stated</a> that growth of mobile commerce will be stunted until new, easier-to-use authentication methods are developed.</p><p>To achieve effective, strong user authentication on websites and applications, developers must balance security with usability. Do this by evaluating the security needs of the business as well as the characteristics of the user population. Is the user base comprised of employees, business partners, or the general public? This will help determine risk level and how stringent the authentication requirements should be.</p><h2>Recommendations For Strong Authentication</h2><h3>Make sure the basics are covered</h3><p>Since most websites and applications will likely choose to continue using a password as the first layer of authentication, make sure these basic security measures covered:</p><ul><li>Enforce a dictionary check to ensure that users cannot choose common words for their password.</li><li>Require a strong username that includes a numeric character. Often the username is the easiest portion of the login credentials for a hacker to guess. Do not use the user’s email address as their username.</li><li>Limit the number of failed login attempts to three and temporarily suspend account access unless the user can authenticate through other means.</li><li>If the login fails, don’t identify which portion of the credentials was incorrect. Stating that the ‘password is incorrect’ or the ‘username doesn’t exist’ enables hackers to harvest account information. A general statement such as “Incorrect login, please try again” helps prevent account harvesting.</li><li>Use SSL to create an encrypted link between your server and the user’s web browser during account enrolment, the login process and the password reset process.</li><li>Provide users with advice on how to choose a strong username and password. Research shows that users do choose better passwords when given advice on how to do so. One option is to have a password strength meter built into the page.</li><li>Hash user passwords using bcrypt, scrypt, or other hash algorithms specifically designed to store passwords. Do not use SHA1, MD5 or other algorithms that were not designed for hashing passwords, as they are not secure.</li><li>Use Salt. Use a unique salt for each user account/password and store that salt with the password. An additional layer of system wide salt that is not stored with the password can also add extra strength if the database is stolen because it is not stored with the passwords but is known to you.</li></ul><p>These steps may seem rudimentary to some readers, but a study conducted by researchers at Cambridge University showed that most websites did not even enforce these minimum standards.<a
title="" href="#_edn1">[i]</a></p><h3>SaaS solutions for generating one-time passwords</h3><p>With the growth of Software-as-a-Service (SaaS) providers, it’s easier than ever to adopt authentication solutions that generate one-time passwords for users without any hardware investment or significant integration efforts. While one-time passwords will not stop a sophisticated man-in-the-middle threat, they do protect against the most common security threats: users choosing weak passwords, reusing the same password or having their passwords stolen using keystroke-logging malware.</p><p>By generating one-time passwords for users each time authentication is needed, organizations can ensure strong passwords are used and that previously stolen or leaked passwords cannot be used to access accounts.</p><p>The growing number of user devices with touchscreens enables new approaches to SaaS authentication schemes, including image-based and graphical approaches. Increasingly users are asked to draw a pattern, touch points on a picture or identify a series of secret images to authenticate. When evaluating such approaches, it’s important to make sure the solution generates one-time passwords and is not simply a static pattern or image. User’s fingerprints and smudges on the touchscreen can reveal their secret pattern or touch points if it is a static approach.</p><p>One way to generate one-time passwords using an image-based approach is to have the user choose a few secret categories of things – such as dogs, flowers and cars. Each time authentication is needed the user is presented with a series of pictures on the touchscreen and must tap the ones that fit his previously chosen categories. The specific images are different every time and displayed in a different location on the screen every time, but the user will always look for his same categories. As the user clicks or taps on the pictures that fit his categories, a one-time password is generated behind the scenes and submitted to the server for verification.</p><p>Graphical authentication approaches are easier for users to remember than complex passwords and they are faster for users to perform on smartphones and tablets than typing an alphanumeric password. For this reason, they are a good method for adding a layer of security or a one-time password without inconveniencing users.</p><h3>Risk-based authentication</h3><p>Organizations requiring even stronger security should consider integrating a risk engine with their authentication solutions. Using behavioral and contextual risk profiling, risk engines can dynamically trigger additional layers of authentication only when needed. This increases security without inconveniencing users because users will rarely encounter the additional steps. Risk-based authentication solutions should identify device reputation, and evaluate the geolocation of the user’s IP address and time of day they are accessing the site.</p><p>Also examine the frequency of the login attempts, which could indicate a brute force attack. If a high-risk or suspicious situation is identified, require an additional authentication step from the user. The additional authentication step could simply be second layer of authentication, or it could be a second factor of authentication.</p><h3>Multifactor Authentication</h3><p>Organizations whose websites or applications could be a high-profile target for hackers should adopt out-of-band, multifactor authentication. Multifactor authentication involves at least two of the following authentication factors:</p><ul><li>Something you know (i.e. a password, secret image categories or other shared secret)</li><li>Something you have (i.e. a mobile phone or authentication token)</li><li>Something you are (i.e. biometrics such as a fingerprint)</li></ul><p>Multifactor authentication solutions that rely on the mobile phone as the second factor are increasingly popular. The most common approach involves sending an authentication code to the user’s phone via an SMS text message and having the user type the code into the web page to authenticate. Knowing that banks often use this approach, cybercriminals are increasingly targeting the SMS channel for attack. Using malicious software they are able to compromise a user’s online account, intercept and reroute the authentication text messages to their own phones, then use the code to gain access to the user’s account.</p><p>A more secure approach is to adopt a multi-layered, multifactor authentication solution that remains completely out-of-band from the web session on the PC. Organizations can use push technology to send an authentication challenge to users’ smartphones. Users must solve the authentication challenge on their phone and send back their response/approval via push technology, which uses a server-to-server communication channel and is more secure than SMS.</p><p>For example, using the image-based authentication approach described earlier, when a user logs into their online bank account on the PC they enter their username and password. Using push technology, the bank sends an image-based authentication challenge to the user’s smartphone. The user must tap the images that fit his secret categories and tap a submit button to send his selection back to the bank for verification. The process remains entirely out-of-band from the web session because there is no data to type into the web page on the PC.</p><p>In addition to being out-of-band, the process is multi-layered and multi-factor. The user must have possession of the registered second factor device (their phone) but also apply a shared secret (knowledge of their secret categories) on the phone. Even if someone else had possession of the user’s mobile phone or intercepted the delivery of the out-of-band authentication challenge, they would not be able to complete the process because they would not know which images to identify.</p><p>When evaluating multifactor authentication solutions that rely on the user’s mobile phone as the second factor, look for solutions that remain completely out-of-band from the web session on the PC and those that use push technology rather than plain text SMS.</p><p><b>Biometrics and Behavioral Biometrics</b></p><p>Biometrics and behavioral biometrics are also increasingly viable authentication options. Most laptops, smartphones and tablets now come with built-in video cameras that can be used for facial recognition, and fingerprint scanners are quite common in mobile and desktop environments. Smartphone applications can be used for voice recognition. However, drawbacks of biometric authentication include the need to maintain the equipment and ‘body parts’ to get accurate readings; biometric ID data must also be stored in databases and is therefore susceptible to theft and forgery.</p><p>Depending upon the type of organization or account being accessed, users may not be willing to provide biometric data for authentication. For example, users may be willing to use a fingerprint scanner to authenticate for their bank account, but not for a social networking or shopping site.</p><p>Behavioral biometrics are technologies that tracks the user’s behavioral patterns such as keystroke speed and mouse movements. These and other behavioral profiling techniques can help to successfully identify individual users, especially when used in conjunction with another authentication factor. Behavioral biometrics are usually analyzed behind the scenes, unnoticed by the user, so they do not inconvenience the user, which helps improve the usability of security.</p><h1>Conclusion</h1><p>Authentication standards on most websites and applications are woefully lacking. Relying solely on passwords puts the organization, its users and its data at risk. Not every website needs multifactor authentication, but most can benefit from using multiple layers of authentication or one-time passwords. User education is also critical for improving authentication. Unless the user clearly understands the reasons for additional authentication requirements, they will find ways to circumvent the policies.</p><p>Finally, it’s important to remember that ‘security’ is a process–organizations must continually re-evaluate security needs, identify areas for improvement and make a security roadmap for future improvements. A website or application can never be completely secure, but developers and security professionals should aim to strengthen security to the point where it will deter most attackers while maintaining ease of use for end-users.</p><div><br
clear="all" /></p><hr
align="left" size="1" width="33%" /><div><p><a
title="" href="#_ednref1">[i]</a> “The password thicket: technical and market failures in human authentication on the web” by Joseph Bonneau and Sören Preibusch</p></div></div><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/strengthen-user-authentication-and-preserve-user-experience/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>WordPress Security</title><link>http://www.sitepoint.com/wordpress-security/</link> <comments>http://www.sitepoint.com/wordpress-security/#comments</comments> <pubDate>Thu, 18 Apr 2013 03:44:52 +0000</pubDate> <dc:creator>Amit Malhotra</dc:creator> <category><![CDATA[Web security]]></category> <category><![CDATA[WordPress]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=65446</guid> <description><![CDATA[Amit Malhotra has compiled a handy list of practices you can adopt that will help to keep your WordPress installation more secure from hackers and spammers.]]></description> <content:encoded><![CDATA[<p></p><h2>Keep Up to Date</h2><p>The first and the most basic measure to secure your WordPress installation is to keep it updated to the latest release. This helps patch security vulnerabilities. The process of updating WordPress is easy and fast.</p><p>With the release of every new version of WordPress, the security bug fixing information becomes public. The WordPress dashboard is upgraded automatically or a manual upgrade can be achieved by overwriting the old files with newly downloaded files from the website. Obsolete older versions of WordPress do not have access to security patches. You don’t want to miss the advanced features and functionality.</p><p>The same is true for plugins. Whenever there is a new version of a plugin available, make sure you update. If you are not using any of the plugins installed, it’s better to remove them from the dashboard.</p><h2>Customize Your Login</h2><p>The default username for WordPress installation is always ‘admin’. If you don&#8217;t change the username, you are giving hackers a head start &#8211; they only have to crack your password to get access to your dashboard. You can use the following steps to make a new username:<div
id='div-gpt-ad-1328644474660-10' style='width:728px; height:90px;'> <script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1328644474660-10'); });</script> </div></p><ol><li>Login with your admin username first. When you are inside the WordPress dashboard, click on Users &gt; Add New.</li><li>Type in a new name and give it full administrative access.</li><li>Log out and then log in with the newly created Administrative account.</li><li>Make sure that all earlier posts and pages are given authorship to the new account. This is to make sure all your posts and pages don&#8217;t get deleted when you delete your Admin account and they are just transferred to another username.</li><li>Delete the original admin account.</li></ol><p>It is recommended to use a different username to make new posts and pages, with Author status. Use your Administrative account when you need to update WordPress and plugins.</p><p>The password you set needs to be a complex one, a mix of letters, numerals and symbols. Using a strong password is essential on all entry points to secure your website fully.</p><h2>Hide the WordPress Version</h2><p>Outdated versions of WordPress are easier to hack and knowing the version number presents an incentive for hackers. Even if you are using an older version of WordPress for some reason, you don&#8217;t have to advertise that fact.</p><p>The WordPress version is by default displayed on the blog and is visible to the public eye. There are plugins available which remove the WordPress version from your source code. One such plugin is <em>Sucuri Security</em>, another is <em>Secure WordPress</em>, both available in the WordPress plugins repository. Keep the hackers guessing!</p><p>If you prefer to keep the use of plugins to a minimum, you can include a line of code in the <code>functions.php</code> file to prevent the WordPress version from getting displayed:</p><pre>/* Remove WordPress version number */
function nm_remove_wp_version() {
return '';
}
add_filter('the_generator', 'nm_remove_wp_version');</pre><p>The above code ensures complete removal of the WordPress version number from everywhere, be it your header file or RSS Feeds.</p><h2>Restrict File Permissions</h2><p>File permissions should be restricted to prevent breach of security of your site. The file permissions should be set to the bare minimum.</p><p>Setting the CHMOD value to 755 for folders means only the owner has write permissions and others will have read and execute permissions. Setting the CHMOD value to 644 for files means the owners have the read and write permissions and others can only read the files.</p><h2>Backup</h2><p>You should keep backups of all important files. Keeping a backup of WordPress data and files can play a crucial role in times of emergency. Backups can put an end to a lot of your troubles and set your mind at peace.</p><p><em>WP-DB Manager</em> is a good option for backing up the whole of a WordPress website. Online backup options are also a good choice. Maintaining regular backup would ensure that your website is restored within the minimum possible time just in case it gets compromised. <em>WordPress Database Backup</em> is another plugin and can be used as a good option. It allows you to save the database to the server or download it on to your computer. You can also email the backup on your chosen email id. You can schedule the backup hourly, daily or weekly.</p><h2>Restrict Access to Your Plugins</h2><p>You should definitely restrict or simply deny access to your WordPress plugins directory. A visit to <code>www.your-domain.com/wp-content/plugins/</code> reveals all the plugins that have been used in the website. These plugins might contain vulnerabilities, which might put the site’s security at risk and attract hackers.</p><p>To deny access to the directories, the easiest way is to use a <code>.htaccess</code> file or just upload a blank <code>index.html</code> file to that directory. If the <code>index.php</code> or <code>index.html</code> files are not present in the particular directory, you must also add the following line at the start in your <code>.htaccess</code> file in the root folder:</p><p><code>Options –Indexes</code></p><p>This will prevent the public accessing your files in the directories.</p><h2>Change Database Table Prefixes</h2><p>When you first install WordPress using the default values and options, WordPress tables use table prefixes like <code>Wp_</code>. As hackers can exploit this feature, it is recommended to change the default table prefix <code>Wp_</code> to something else. To change the database table prefixes after install, you can use <em>WP Secure Scan</em> plugin. If you use another plugin named <em>Change DB Prefix</em> plugin, it can rename table prefix to another string.</p><h2>Change Default Secret Keys</h2><p>When you first install WordPress, there are four secret keys written in your <code>wp-config.php</code> file. Go <a
href="https://api.wordpress.org/secret-key/1.1/salt/">here</a> and copy all the six keys and use them to replace the four keys present in <code>wp-config.php</code> file. These are the random keys generated by WordPress and are changed every time you refresh the page. This helps making your passwords more secure and if anybody is logged into WordPress at that time, they will be logged out of the dashboard immediately as the cookies become invalid.</p><h2>Secure Your Login Page</h2><p>Your WordPress login page is accessible to the world and you must secure it so that nobody could gain access to the installation. Error messages on login pages can give clues to hackers.</p><p>To remove error messages on the login page, add the following line of code in your theme <code>functions.php</code> file:</p><pre>add_filter('login_errors',create_function('$a', "return null;"));</pre><p>This will remove the error message displayed above the username and password box.</p><p>You can use plugins such as <em>Google Authenticator</em> and <em>Login Dongle</em> for an extra layer of security. <em>Google Authenticator</em> is a great plugin that adds a two-step verification to your WordPress blog, as the name suggests &#8211; similar to Google Account security. Enter a password and a code sent your mobile phone.  <em>Login Dongle</em> plugin generates a bookmarklet with a secret question.</p><h2>Secure Your Device</h2><p>Make sure your workstation, PC, mobile, tablet or alternate device is fully secure and automatically updated. The antivirus software and the operating systems should also be updated to the latest release. Set secure passwords for all authentication vectors. These passwords should be complex and should also be changed frequently.</p><p>The PCs and servers should be equipped with the latest and the best anti-virus software and be secure from all malware threats. This should include periodic cleaning of harmful bugs. Firewalls should be installed at every level: operating system level, router level and even Internet service protocol level. This should ensure that all the PCs and web servers of your work station are secure.</p><h2>Don&#8217;t Share Your Login</h2><p>Just like any other secured networks or accounts, you should be careful not to share the username or password with anybody you don’t fully trust. Even in the worst case scenario where you have hired a webmaster to manage your website, ensure you do not share your username or password. You can create separate accounts for them with customized permissions.</p><h2>Secure Your Content</h2><p>While uploading content to the website, ensure that the content itself is authentic and is downloaded from safe/reliable sources. Even when you are uploading a script, you need to be cautious as there can be malwares intentionally designed to harm your website.</p><p>This is not intended to be an exhaustive list of all possible ways of securing your WordPress installation, but it does give you a handy list of WordPress security issues to consider and ways of addressing them, whether by the use of purpose-specific plugins or simple actions you can take.</p><p>Feel free to add more methods in the comments below.</p><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/wordpress-security/feed/</wfw:commentRss> <slash:comments>23</slash:comments> </item> <item><title>Micropulses: a New Threat to Internet Security?</title><link>http://www.sitepoint.com/micropulses-internet-security-threat/</link> <comments>http://www.sitepoint.com/micropulses-internet-security-threat/#comments</comments> <pubDate>Mon, 01 Apr 2013 07:22:09 +0000</pubDate> <dc:creator>Craig Buckler</dc:creator> <category><![CDATA[News]]></category> <category><![CDATA[Web security]]></category> <category><![CDATA[encryption]]></category> <category><![CDATA[security]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=64794</guid> <description><![CDATA[A new technology could reveal your personal information regardless of encryption protocols or other safeguards. Craig looks at how micropulses could compromise  online security as we know it.]]></description> <content:encoded><![CDATA[<p></p><p>Recent research at the University of Scunthorpe in the UK has identified an issue which could compromise the security on which we depend for online shopping and banking. The department for Computer Research and Advanced Protocols has demonstrated IDentity Information Overlay Technology. The technique analyzes your activity rather than data packets to reveal passwords, visited sites and other sensitive personal information.</p><p>The project leader, Professor Juppe, explains:</p><p><img
class="right" alt="binary data flow" src="http://blogs.sitepointstatic.com/images/tech/805-april-micropulses-binary.png" width="330" height="74" />Modern devices have a persistent Internet connection. Even if you&#8217;re not actively using a device, it&#8217;s fetching messages, checking for software updates or handling other processes which result in a steady stream of data transmission. Binary is converted to electronic signals which flow through the network.</p><p>Binary data is usually represented as clean voltage spikes. In reality, the signal is affected by electromagnetic interference which causes imperceptibly small fluctuations named &#8220;micropulses&#8221;. While they are rarely enough to cause data loss, micropulses pass through wired and wireless communication layers. They can even cause minuscule delays and bursts when translated through a fiber-optic bridge.</p><p><img
class="right" alt="binary data carrier wave" src="http://blogs.sitepointstatic.com/images/tech/805-april-micropulses-carrier.png" width="330" height="91" />The biggest cause of micropulses is the user; the human body acts as a transmitter when using an input device such as a keyboard. In essence, your connected data flow becomes a carrier wave for micropulse information which can be analyzed. It does not matter whether your connection uses HTTP or HTTPS &#8212; the actual data can be ignored but your activities are revealed.<div
id='div-gpt-ad-1328644474660-10' style='width:728px; height:90px;'> <script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1328644474660-10'); });</script> </div></p><p><img
class="left" alt="micropulse analysis success" src="http://blogs.sitepointstatic.com/images/tech/805-april-micropulses-success.png" width="362" height="264" />The technology is being refined and the rate of successful micropulse analysis increases exponentially each year. The technique works better if you are physically close to the target &#8212; such as on the same wifi connection. However, the research team has successfully attempted analysis over hundreds of miles and, as micropulse detection improves, geographical location is unlikely to remain a limiting factor.</p><h2 style="clear: both">Micropulse Protection</h2><p>Micropulse analysis technology is experimental but the threat is real. Fortunately, there are a number of low-tech solutions which significantly reduce the risk of identity infringement.</p><p><strong>1. Use an on-screen keyboard</strong><br
/> Touch screen and on-screen keyboards are not completely immune, but micropulse analysis is made far more difficult. Professor Juppe suggests switching between on-screen and real keyboards when entering sensitive information such as passwords.</p><p><img
class="right" alt="micropulse protection" src="http://blogs.sitepointstatic.com/images/tech/805-april-micropulses-keyboard.jpg" width="400" height="300" /><strong>2. Shield your input devices</strong><br
/> Wrap aluminum foil around devices such as keyboards &#8212; the shiny side should face inward to reflect the pulses. If you&#8217;re using a laptop, use a small piece of foil around the Ethernet cable or, on wifi, regularly move the device to modify micropulses and make them more difficult to analyze.</p><p><strong>3. Reduce electromagnetic interference</strong><br
/> Device shielding may not be enough since your body conducts micropulse information. The effect can be reduced by wearing gloves and rubber boots while working.</p><p>Have any of your accounts been compromised even though you were careful to safeguard passwords? Have you been approached by someone who knew details of your online activities or services? Could micropulses be to blame?</p><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/micropulses-internet-security-threat/feed/</wfw:commentRss> <slash:comments>19</slash:comments> </item> <item><title>Detect Hacked Files via CRON/PHP</title><link>http://www.sitepoint.com/detect-hacked-files-via-cronphp/</link> <comments>http://www.sitepoint.com/detect-hacked-files-via-cronphp/#comments</comments> <pubDate>Mon, 18 Feb 2013 13:57:51 +0000</pubDate> <dc:creator>DK Lynn</dc:creator> <category><![CDATA[Programming]]></category> <category><![CDATA[Web security]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=63491</guid> <description><![CDATA[Ethical hacker DK Lynn looks at tracking unauthorized changes in files vulnerable to hacking via comparison of databased hash values. ]]></description> <content:encoded><![CDATA[<p></p><p>As a Certified Ethical Hacker, I searched for a script which would help me to detect unauthorized file changes. I found a script (probably in the User Contributed Notes at php.net) which I modified to have working very nicely on my &#8220;test server&#8221; (Windows) as well as on my &#8220;production&#8221; server (Linux).</p><p>The logic is simple: &#8220;Build a database of hashed values for vulnerable files (those which hackers will modify to execute code on your server) and compare those values to the actual hashes on a regular basis and report added, changed and deleted files.&#8221;</p><p>Obviously, the code to traverse a server&#8217;s directory structure and provide hash values is far more complex than the statement above. I will go through the code for the production server.</p><h2>Database Setup</h2><p>For security, use a separate database for this which does not share access credentials with any other database. Use cPanel to create the new database and the new user with a strong password (I recommend a 16 character password generated by <a
href="http://strongpasswordgenerator.com">strongpasswordgenerator.com</a>) and an innocuous name like baseline. Then use PHPMyAdmin&#8217;s SQL to create two tables:</p><pre>    CREATE TABLE baseline (
        file_path VARCHAR(200) NOT NULL,
        file_hash CHAR(40) NOT NULL,
        acct VARCHAR(40) NOT NULL
        PRIMARY KEY (file_path)
    );
&nbsp;
    CREATE TABLE tested (
        tested DATETIME NOT NULL,
        account VARCHAR(40) NOT NULL
        PRIMARY KEY (tested)
    );</pre><p>The first table, &#8220;baseline,&#8221; contains a large field for your <code>path/to/filenames</code>, a fixed field for the <code>file_hash</code> (40 characters are required for SHA1) and <code>acct</code> to allow me to monitor accounts or domains separately. Set the <code>file_path</code> as the Primary Key.<div
id='div-gpt-ad-1328644474660-10' style='width:728px; height:90px;'> <script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1328644474660-10'); });</script> </div></p><p>The &#8220;tested&#8221; table will hold the <code>DATETIME</code> of every scan and the account is the same as baseline&#8217;s <code>acct</code> field so it will allow you to scan various accounts or domains and keep their data separate.</p><h2>Initialize the PHP File:</h2><p>First, DEFINE several constants</p><ul><li><code>PATH</code> is the physical path to the start of your scan, which is usually the <code>DocumentRoot</code>. Just remember not to use Windows&#8217; backslashes because both Apache and PHP will be looking for forward slashes.</li><li>Database access constants <code>SERVER</code> (<code>'localhost'</code>), <code>USER</code>, <code>PASSWORD</code> and <code>DATABASE</code>.</li></ul><p>and several variables</p><ul><li>An array of the file extensions to examine. Because not all files are executable on the server, I only scan <code>.php</code>, <code>.htm</code>, <code>.html</code> and <code>.js</code> files and these need to be specified in an array. Note than an empty array will force ALL files to be scanned (best for security but uses the most server resources).</li><li>Directories to exclude. Iif you have a directory containing malware, shame on you! In any event, if you need to exclude a directory for any reason, you have the opportunity to list them in an array. Don&#8217;t omit any directories just because you only stored images or pdf files, though, there because a hacker can put his files in there, too!</li><li>Initialize the variables you&#8217;re about to use: The <code>$file</code> array as an empty <code>array()</code>, the <code>$report</code> string as an empty string and the <code>$acct</code> string (use the account/<code>acct</code> name from your database tables) need to be initialized.</li></ul><p>&nbsp;</p><h2>Let&#8217;s get started!</h2><pre>&lt;?php
//          initialize
$dir = new RecursiveDirectoryIterator(PATH);
$iter = new RecursiveIteratorIterator($dir);
while ($iter-&gt;valid())
{
    //          skip unwanted directories
    if (!$iter-&gt;isDot() &amp;&amp; !in_array($iter-&gt;getSubPath(), $skip))
    {
        //          get specific file extensions
        if (!empty($ext))
        {
            //          PHP 5.3.4: if (in_array($iter-&gt;getExtension(), $ext))
            if (in_array(pathinfo($iter-&gt;key(), PATHINFO_EXTENSION), $ext))
            {
                $files[$iter-&gt;key()] = hash_file("sha1", $iter-&gt;key());
            }
        } else {
            //          ignore file extensions
            $files[$iter-&gt;key()] = hash_file("sha1", $iter-&gt;key());
        }
    }
    $iter-&gt;next();
}</pre><p>What we&#8217;ve just done is use the <code>RecursiveIteratorIterator()</code> function (a function used to iterate through recursive iterators)  on the directory (<code>$dir</code>) as it iterates through the directory structure. The first thing it does is check whether a directory has been banned from the iteration then branch depending upon whether file extensions had been specified. The result is a two-dimensional matrix of files, (<code>$files</code>), with <code>path/name.ext</code> as the index and corresponding SHA1 hash value.</p><p>I&#8217;ll note here that the commented echo statements were used on my Windows test server without linking to the SMTP server but you&#8217;ll need to uncomment them if you need to verify the correct functionality.</p><p>The file count can be provided immediately by the files array:</p><pre>$report .= "Files has " . count($files) . " records.\r\n";</pre><p>The output, whether to your test monitor or email, has just been given its first non-empty value: the hashed file count.</p><p>&nbsp;</p><h2>Last Hash Scan</h2><p>The next thing to do is fetch the data/time the last hash scan was accomplished and get the stored path/file and hash set from the database.</p><pre>$results = mysqli_query($db,"SELECT tested FROM tested WHERE acct = '$acct'
    ORDER BY tested DESC LIMIT 1");
if ($results)
{
    while($result=mysqli_fetch_array($results))
    {
        $tested = $result['tested'];
    }
$report .= "Last tested $tested.\r\n";
}</pre><p>&nbsp;</p><h2>Compare Hashed Files with Database Records</h2><p>So far, we&#8217;ve only learned the current file count and datetime of the last scan. The value we&#8217;re looking for is to identify the changed files, i.e., those added, changed or deleted. Let&#8217;s create an array of the differences.</p><pre>//          identify differences
if (!empty($files))
{
    $result = mysqli_query($db,"SELECT * FROM baseline");
    if (!empty($result))
    {
        foreach ($result as $value)
        {
            $baseline[$value["file_path"]] = $value["file_hash"];
            }
            $diffs = array_diff_assoc($files, $baseline);
            unset($baseline);
        }
    }
&nbsp;
//          sort differences into Deleted, Altered and Added arrays
if (!empty($files))
{
    $results = mysqli_query($db,"SELECT file_path, file_hash FROM baseline WHERE acct = '$acct'");
    if (!empty($results))
    {
        $baseline = array();      //          from database
        $diffs = array();         //          differences between $files and $baseline
                                  //          $files is current array of file_path =&gt; file_hash
        while ($value = mysqli_fetch_array($results))
        {
            if (!array_key_exists($value["file_path"], $files))
            {
                //          Deleted files
                $diffs["Deleted"][$value["file_path"]] = $value["file_path"];
                $baseline[$value["file_path"]] = $value["file_hash"];
            } else {
                    //          Altered files
                    if ($files[$value["file_path"]] &lt;&gt; $value["file_hash"])
                    {
                        $diffs["Altered"][$value["file_path"]] = $value["file_path"];
                        $baseline[$value["file_path"]] = $value["file_path"];
                    } else {
                            //          Unchanged files
                            $baseline[$value["file_path"]] = $value["file_hash"];
                    }
            }
        }
        if (count($baseline) &lt; count($files))
        {
            //          Added files
            $diffs["Added"] = array_diff_assoc($files, $baseline);
        }
        unset($baseline);
    }
}</pre><p>When completed, the <code>$diffs</code> array will either be empty or it will contain any discrepancies found in the multi-dimensional array sorted by Deleted, Altered and Added along with the path/file and associated hash pairs for each.</p><p>&nbsp;</p><h2>Email Results</h2><p>You will need to add the discrepancies to the report and email.</p><p>&nbsp;</p><pre>//          display discrepancies
if (!empty($diffs)) {
$report .= "The following discrepancies were found:\r\n\r\n";
foreach ($diffs as $status =&gt; $affected)
{
    if (is_array($affected) &amp;&amp; !empty($affected))
    {
        ($test) ? echo "&lt;li&gt;" . $status . "&lt;/li&gt;" : $report .= "* $status *\r\n\r\n";
        ($test) ? echo "&lt;ol&gt;" : '';
        foreach($affected as $path =&gt; $hash) $report .= " • $path\r\n";
    }
}
} else {
    $report .= "File structure is intact.\r\n";
}
&nbsp;
$mailed = mail('you@example.com', $acct . ' Integrity Monitor Report',$report);</pre><p>&nbsp;</p><h2>Update the Database</h2><p>You&#8217;re not finished yet!</p><pre>//          update database
//          clear old records
mysqli_query($db,"DELETE FROM baseline WHERE acct = '$acct'");
&nbsp;
//          insert updated records
foreach ($files as $path =&gt; $hash)
{
    mysqli_query($db,"INSERT INTO baseline (file_path, file_hash, acct)
        VALUES ('$path','$hash', '$acct')");
}
&nbsp;
mysqli_query($db,"INSERT INTO tested (tested, acct) VALUES (NOW(), '$acct')");
&nbsp;
mysqli_close($db);
?&gt;</pre><p>On the first pass, there will be nothing in the database&#8217;s baseline table and ALL files will display as Added so don&#8217;t be alarmed.</p><p>Now that you have the code, where do you upload it? Don&#8217;t even consider placing this code in your webspace (under the DocumentRoot) as that will mean that anyone can access your file and delete the saved information to invalidate your hash scans. For simplicity, put it in the same directory of your account which holds <code>public_html</code> (or similar) directory.</p><p>&nbsp;</p><h2>Activate</h2><p>Now that you have the code, you need to have it activated on a regular basis. That&#8217;s where the CRON function of the server excels! Simply use your cPanel to create a new CRON job, set the time in the middle of the night when your server should be nearly idle (you don&#8217;t want to interfere with or delay visitors&#8217; activities, which also means you should limit yourself to a single scan per day) and use the following directive:</p><pre>/usr/local/bin/php -q /home/account/hashscan.php</pre><p>where <code>/usr/local/bin/php</code> is the location of the server&#8217;s PHP executable and <code>/home/account/hashscan.php</code> is the path to your <code>hashscan.php</code> script (or whatever name you gave it).</p><p>&nbsp;</p><h2>Wrap-Up</h2><p>We have created a new database with two tables, one to hold the dates and one to hold the baseline hashes. We have initiated every scan by identifying the file types (by extension) that we need to track and identified the start point (<code>DocumentRoot</code>) for our scan.</p><p>We&#8217;ve scanned the files avoiding the unwanted directories and compared the hashes against the baseline in the database. Closing the process, we&#8217;ve updated the database tables and either displayed (on a test server) or emailed (from the production server) the results. Our CRON job will then activate your hash scan on a regular basis.</p><p><a
href="http://blogs.sitepointstatic.com/examples/detect-hacked-files-via-cronphp/HashAlert.zip">This ZIP file</a> contains the above <code>CreateTable.sql</code>, <code>hashscan.php</code> and <code>CRON.txt</code> files.</p><p>This is but one part of securing your website, though, as it will only inform you of changes to the types of files you&#8217;ve specified. Before you get this far, you must ensure that your files are malware free (maldet scans established by your host can do this but be sure that you keep a clean master copy off-line), ensure that no one but you can upload via FTP (by using VERY strong passwords) and keep &#8220;canned apps&#8221; up to date (because their patches are closing vulnerabilities found and exploited by hackers and their legions of &#8220;script kiddies&#8221;).</p><p>In summary, BE PARANOID! There may be no-one out to get you but there <i>are</i> those out for &#8220;kicks&#8221; who are looking for easy prey. Your objective is to avoid that classification.</p><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/detect-hacked-files-via-cronphp/feed/</wfw:commentRss> <slash:comments>21</slash:comments> </item> <item><title>CAPTCHA: Inaccessible to Everyone</title><link>http://www.sitepoint.com/captcha-inaccessible-to-everyone/</link> <comments>http://www.sitepoint.com/captcha-inaccessible-to-everyone/#comments</comments> <pubDate>Thu, 07 Feb 2013 13:44:19 +0000</pubDate> <dc:creator>Gian Wild</dc:creator> <category><![CDATA[Accessibility]]></category> <category><![CDATA[Usability]]></category> <category><![CDATA[Web security]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=63309</guid> <description><![CDATA[Expert web accessibility consultant Gian Wild explains that CAPTCHAs are both unusable and inaccessible. So why does everyone keep using them?]]></description> <content:encoded><![CDATA[<p></p><h2>What’s a CAPTCHA?</h2><p>CAPTCHA stands for Completely Automated Public Turing test to tell Computers and Humans Apart.</p><p>On the webpage, a CAPTCHA is a security measure designed to keep out robots by asking the user to key in characters displayed in a box.</p><p>Yes, that&#8217;s the one: where you have to decipher some squiggly words and enter them in a field before you can submit an online form.And often do it three or four times before you&#8217;re successful.</p><p>For example:</p><p><img
class="alignnone size-full wp-image-63310" alt="CAPTCHAs" src="http://www.sitepoint.com/wp-content/uploads/1/files/2013/02/figure42.png" width="600" height="412" /></p><p>For more information on definitions, see the comprehensive <a
href="http://en.wikipedia.org/wiki/CAPTCHA">Wikipedia article on CAPTCHAs</a>.</p><p>As far as the real world goes, there are some real doozies out there, like the <a
href="http://api.addthis.com/oexchange/0.8/forward/email/offer?url=http://picturesofyou.com.au/&amp;username=tacweb&amp;title=TAC%20-%20Pictures%20of%20You">moving CAPTCHA</a> we found recently in an audit (we’re rebuilding the site so it won’t be there long!)</p><p>John Foliot found some <a
href="http://john.foliot.ca/not-the-blog-post-i-was-going-to-write-today/">inexpressibly confusing CAPTCHAs</a>, an article which is worth a read – please note there is a lot of movement in the article (and no it doesn’t fail the flickering accessibility requirements even if it looks like it)!<div
id='div-gpt-ad-1328644474660-10' style='width:728px; height:90px;'> <script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1328644474660-10'); });</script> </div></p><h2>Why are there so many CAPTCHAs?</h2><p>Really, the world would be a much easier place without CAPTCHAs. They are confusing and difficult and we are all time-poor. And surely people want us to use their web site / submit their form / sign up to their newsletter?</p><p>The reason that there are so many CAPTCHAs is that there is so much spam in the world. They are perceived as an effective way to prevent robots from, for example, posting comment spam on blogs.</p><p>Another common use is to prevent robots with more criminal intent from logging into online bank accounts and the like.</p><p>The CAPTCHA is, in reality, a reverse Turing test – performed by a machine to make sure the person filling out the form is, well, a person.</p><p>This is also why they are often difficult to interpret. If they were easy to read, then machines could read them, and that would defeat the point.</p><h2>What about accessibility?</h2><p>Not only are CAPTCHAs difficult for anyone to use, they are notoriously inaccessible to people with some types of disabilities.</p><p>In fulfilling their designated brief of keeping out machines, they keep out people using assistive technologies such as screen readers, thereby closing the door on millions of blind people. So, if you&#8217;re blind, use a screen reader and want to log into your CAPTCHA-protected bank account, well &#8230; bad luck. Isn&#8217;t there a law against that? There ought to be.</p><p>There is even a specific section in the Web Content Accessibility Guidelines, Version 2.0 about CAPTCHA, in which their inaccessibility is acknowledged, but the WCAG Working Group feel they can&#8217;t be too hard-line about it:</p><blockquote><p><acronym>CAPTCHAs</acronym> are a controversial topic in the accessibility community. As is described in the paper <a
href="http://www.w3.org/TR/turingtest/">Inaccessibility of CAPTCHA</a>, CAPTCHAs intrinsically push the edges of human abilities in an attempt to defeat automated processes. Every type of CAPTCHA will be unsolvable by users with certain disabilities. However, they are widely used, and the Web Content Accessibility Guidelines Working Group believes <b><i>that if CAPTCHAs were forbidden outright, Web sites would choose not to conform to WCAG rather than abandon CAPTCHA</i></b>. This would create barriers for a great many more users with disabilities. For this reason the Working Group has chosen to structure the requirement about CAPTCHA in a way that meets the needs of most people with disabilities, yet is also considered adoptable by sites. Requiring two different forms of CAPTCHA on a given site ensures that most people with disabilities will find a form they can use.</p><p>Because some users with disabilities will still not be able to access sites that meet the minimum requirements, the Working Group provides recommendations for additional steps. Organizations motivated to conform to WCAG should be aware of the importance of this topic and should go as far beyond the minimum requirements of the guidelines as possible. Additional recommended steps include:</p><ol><li>Providing more than two modalities of CAPTCHAs</li><li>Providing access to a human customer service representative who can bypass CAPTCHA</li><li>Not requiring CAPTCHAs for authorized users”</li></ol></blockquote><p
align="right"><a
href="http://www.w3.org/TR/UNDERSTANDING-WCAG20/text-equiv-all.html">http://www.w3.org/TR/UNDERSTANDING-WCAG20/text-equiv-all.html</a></p><p
style="text-align: left;" align="right">The emphasis in the above quote is mine. When they talk about &#8220;two different forms of CAPTCHA&#8221;, they mean one that requires sight to complete plus one that relies on audio and should therefore be accessible to people with impaired vision. They then acknowledge that still won&#8217;t make it accessible to everyone.</p><p
style="text-align: left;" align="right">In reality, the ones that rely on vision are so difficult to use for fully sighted people, while the audio versions use sounds so distorted that no-one can make them out.</p><p>So basically they are inaccessible, but the Working Group decided that if people had to choose between CAPTCHAs and WCAG2 they would choose CAPTCHAs, so they allowed for it anyway.</p><p>I believe there are some effective unique and most importantly, accessible, alternatives to CAPTCHA, but I’ll talk about that in a later article.</p><h2>What about reCAPTCHA – it’s accessible isn’t it?</h2><p>In a word, no.</p><p><img
class="alignnone size-full wp-image-63311" alt="recaptcha" src="http://www.sitepoint.com/wp-content/uploads/1/files/2013/02/recaptcha.png" width="310" height="163" /></p><p>I’m always asked about reCAPTCHA, or what about Accessible CAPTCHA? I have tested numerous CAPTCHAs and <b>I have never come across an accessible CAPTCHA</b>. Feel free to prove me wrong.</p><p>But I am also yet to find a CAPTCHA that complies to WCAG2 either.</p><p>There is a fundamental disconnect in intent that means it is highly unlikely that a universally accessible CAPTCHA, or even a set of different CAPTCHAs will ever be devised.</p><p>CAPTCHAs are, by definition, exclusive: they are are there to keep baddies out. Their way of testing &#8220;badness&#8221; does not allow for the legitimate use of machines. So they will tend to be inaccessible.</p><p>To understand how this becomes a negative spiral, you only have to look at the Google Account Sign Up process. In order to make it &#8220;accessible&#8221;, Google provide an audio version. A group of hackers was able to prove that it could pass the audio test robotically (read more about it in the article <a
href="http://arstechnica.com/security/2012/05/google-recaptcha-brought-to-its-knees/">Google recaptcha brought to its knees</a>).</p><p>Did Google concede the CAPTCHA was a failure and should be replaced by something more accessible? Not a bit of it. Instead, they made the audio more distorted so that a machione couldn&#8217;t possibly interpret it correctly &#8211; and nor could any human. Seriously. Try the <a
href="https://accounts.google.com/SignUp?service=mail&amp;continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&amp;ltmpl=default&amp;hl=en">Google CAPTCHA</a> yourself.</p><p>One of the hackers pinpointed out the problem:</p><blockquote><p>While the changes stymied the Stiltwalker attack, Adam said his own experience using the new audio tests leaves him unconvinced that they are a true improvement over the old system.</p><p>&#8220;I could only get about one of three right,&#8221; he said. &#8220;Their Turing test isn&#8217;t all that effective if it thinks I&#8217;m a robot.&#8221;</p></blockquote><p>Couldn’t have said it better myself.</p><p>In my next article, I&#8217;ll explore how to replace CAPTCHAs with accessible options, while maintaining security and preventing spam.</p><div></div><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/captcha-inaccessible-to-everyone/feed/</wfw:commentRss> <slash:comments>43</slash:comments> </item> <item><title>The Easiest WordPress Security Tip Ever!</title><link>http://www.sitepoint.com/easiest-wordpress-security-tip-ever/</link> <comments>http://www.sitepoint.com/easiest-wordpress-security-tip-ever/#comments</comments> <pubDate>Fri, 11 Jan 2013 19:02:30 +0000</pubDate> <dc:creator>Craig Buckler</dc:creator> <category><![CDATA[Content management]]></category> <category><![CDATA[Open source]]></category> <category><![CDATA[Web security]]></category> <category><![CDATA[WordPress]]></category> <category><![CDATA[security]]></category> <category><![CDATA[tips]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=62138</guid> <description><![CDATA[Craig reveals a WordPress security tip which is so simple, you'll question why you didn't know about it before!]]></description> <content:encoded><![CDATA[<p></p><p>Sometimes you encounter a tip which is so simple you can&#8217;t believe you didn&#8217;t know about it before.</p><p>If you&#8217;re running WordPress, you&#8217;ll have defined a wp-config.php file which contains essential settings such as the MySQL database host, name, user and password. It normally sits in the location where WordPress was installed &#8212; in most cases this will be the web server root but it could be any sub-folder.</p><p>You certainly don&#8217;t want wp-config.php falling into the wrong hands. Under normal circumstances, a naughty cracker cannot view the file because the PHP interpreter would parse it and return an empty page. However:</p><ul><li>The cracker will know exactly where the file is located and can target it more effectively.</li><li>If PHP fails, e.g. perhaps during a update, wp-config.php could be viewed directly in a browser by entering the URL.</li></ul><p><em>Ready for the simple tip&hellip;</em></p><p>Move the wp-config.php file into the folder <strong>above</strong> your WordPress installation.</p><p>For example, you may have a folder structure such as /home/mysite/public_html/ where WordPress is installed. In that case, you would move wp-config.php into /home/mysite/.</p><p>This has several benefits:</p><ol><li>Assuming /home/mysite/public_html/ was the web server&#8217;s root folder, /home/mysite/ is inaccessible to anyone using a browser.</li><li>A cracker has less chance of locating the correct file.</li><li>It&#8217;s so simple, there&#8217;s little reason not to do it!</li></ol><p>Perhaps this won&#8217;t be the most exciting tech article you read today, but it&#8217;s useful to know. I hope it helps with your security efforts.</p><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/easiest-wordpress-security-tip-ever/feed/</wfw:commentRss> <slash:comments>34</slash:comments> </item> <item><title>Is Internet Explorer Development Really a Waste of Time?</title><link>http://www.sitepoint.com/is-internet-explorer-development-really-a-waste-of-time/</link> <comments>http://www.sitepoint.com/is-internet-explorer-development-really-a-waste-of-time/#comments</comments> <pubDate>Mon, 08 Oct 2012 17:16:21 +0000</pubDate> <dc:creator>Craig Buckler</dc:creator> <category><![CDATA[Browsers]]></category> <category><![CDATA[Business]]></category> <category><![CDATA[Usability]]></category> <category><![CDATA[Web security]]></category> <category><![CDATA[browser]]></category> <category><![CDATA[ie]]></category> <category><![CDATA[support]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=59661</guid> <description><![CDATA[Can you dictate which browsers should and shouldn't be used? Or should your site be device agnostic and work regardless? Craig re-opens the old debate.]]></description> <content:encoded><![CDATA[<p></p><p>Mandy Barrington&#8217;s recent article <a
href="http://www.sitepoint.com/how-to-stop-wasting-time-developing-for-internet-explorer/">&#8220;How to Stop Wasting Time Developing for Internet Explorer&#8221;</a> was well-received by SitePoint readers. Mandy&#8217;s main point was that developing for legacy versions of Internet Explorer is painful and she offered several pragmatic suggestions such as <a
href="http://www.sitepoint.com/10-fixes-for-ie6-problems/">making notes about IE-specific issues</a> and charging clients who insist on IE6 compatibility.</p><p>Understandably, many agreed with Mandy&#8217;s article. It justified an opinion held by most web developers: we should forget legacy browsers and concentrate on more interesting technologies. I don&#8217;t necessarily disagree with that sentiment, but want to raise a few points you should also consider&hellip;</p><h2>Analytics Won&#8217;t Tell You the Whole Story</h2><p>You should certainly consult your client&#8217;s web statistics prior to developing a new site. However, be wary about making business decisions based on that data alone.</p><p>If your website didn&#8217;t work in the latest version of Chrome, users would either adopt another browser or go elsewhere. In either case, Analytics would reveal comparatively few Chrome users. In other words, the usability of your existing site affects who can visit.<div
id='div-gpt-ad-1328644474660-10' style='width:728px; height:90px;'> <script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1328644474660-10'); });</script> </div></p><p>In addition, completely new sites will not have Analytics data. <a
href="www.sitepoint.com/browser-trends-october-2012/" class="broken_link">Browser trends</a> can help, but understanding your potential customers is far more important.</p><h2>Not All Users Can Upgrade</h2><p>Legacy IE users are bombarded with <em>&#8216;old browser&#8217;</em> alerts. You can suggest users upgrade their browser but can you succeed where Google has failed?</p><p>As a web developer, you&#8217;re working with IT every day. Upgrading doesn&#8217;t worry you; it&#8217;s easy and everyone should do it. But are you neglecting to consider:</p><ol><li>Large organizations and government departments. Those businesses may have 10-year IT plans. Desktops are locked-down and users can&#8217;t upgrade. Even when a company wants to move forward, migrating thousands of users is not quick, simple or inexpensive.</li><li>Windows XP users. One in four people use XP and that figure is higher for business users. Upgrading beyond IE8 is not an option.</li><li>You are not an average user. Most people do not understand IT. Many are terrified of it &#8212; or certainly worried they&#8217;ll break their PC. Migrating from something they know is a risk regardless of the benefits.</li></ol><h2>Be Careful When Charging Clients More</h2><p>How would you react to a mechanic refused to service your car because they found it difficult? What if they normally charged $700 but ramped it up to $1,000 for you?</p><p>Clients should be charged for more work, but be transparent and explain the issues. It&#8217;s rarely as simple as an extra N% for IE6/7 support. After all, supporting legacy IEs with some cosmetic differences is different to making a pixel-perfect site which functions identically across all browsers.</p><p>Education is the key. Inform them that IE6 was released more than a decade ago and does not behave in the same way as a browser released last month. It&#8217;s possible to support IE6, but providing an identical experience will be difficult, cost significantly more and potentially harm their site with increased bandwidth and lower search engine placement.</p><h2>Democracy or Dictatorship?</h2><p>Is it your job to dictate what browser someone should or shouldn&#8217;t use? Or is it your job to support whatever browsers people are using? As a professional web developer, shouldn&#8217;t you be supporting as many browsers as possible? Do your visitors deserve to see something no matter what?</p><p>Despite Microsoft&#8217;s advertising, the real <em>beauty of the web</em> is that it&#8217;s device agnostic. Sites should work everywhere &hellip; <em>with a few caveats</em>:</p><ul><li>Pixel perfection is futile. If you want IE6 and IE10 to look the same, use Flash or PDFs.</li><li>Functionality implementations may differ. For example, IE users may have to upload files via a form. Other browsers may support <a
href="http://www.sitepoint.com/html5-file-drag-and-drop/">drag and drop</a>, <a
href="http://www.sitepoint.com/html5-javascript-open-dropped-files/">previews</a>, client-side resizing, etc.</li><li>Making a complex application work everywhere is not always worth the effort. Even if you could get an HTML5 <code>canvas</code>-based game working in IE6, it would sap your budget and run slowly.</li></ul><p><strong>But content-only websites and online shops have few excuses.</strong></p><p>Looking at the technicalities, IE9 and 10 are unlikely to cause you major problems. IE8 will generally work, although you&#8217;ll be missing nicer CSS3 effects. Which leaves us ancient bug-ridden browsers such as IE7 and below.</p><p>However, consider how you would react to an article stating that developers shouldn&#8217;t support screen readers. Many of these make IE6 look sophisticated and they have far fewer users &#8212; but I&#8217;d hope there&#8217;d be an outcry.</p><p>No one&#8217;s forcing you to develop for IE6, IE3, Lynx, JAWS or a five-year old Nokia browser but that doesn&#8217;t make it impossible. <a
href="http://www.sitepoint.com/progressive-enhancement-graceful-degradation-basics/">Progressive Enhancement</a> remains a viable technique and rarely requires extra effort if it&#8217;s implemented correctly from the start. That said, technology has moved on and developers rarely bother when CSS and JavaScript are ubiquitous.</p><p>I expect this article to whip up a storm of <em>&#8220;I ain&#8217;t supporting IE6 no matter what, buddy&#8221;</em> comments. But what if there was a way to support legacy browsers without significant development or testing? It&#8217;s time for you to read&hellip;<br
/> <a
href="http://www.sitepoint.com/support-old-browsers-responsive-web-design/" rel="nofollow"><strong>How to Use Responsive Web Design to Support Old Browsers</strong></a></p><p>Will you reconsider your anti-old-browser policy now?&hellip;</p><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/is-internet-explorer-development-really-a-waste-of-time/feed/</wfw:commentRss> <slash:comments>47</slash:comments> </item> <item><title>Could You Be Sued for Bugs in Your Application?</title><link>http://www.sitepoint.com/developers-sued-for-application-bugs/</link> <comments>http://www.sitepoint.com/developers-sued-for-application-bugs/#comments</comments> <pubDate>Fri, 31 Aug 2012 15:01:37 +0000</pubDate> <dc:creator>Craig Buckler</dc:creator> <category><![CDATA[Community]]></category> <category><![CDATA[News]]></category> <category><![CDATA[Web security]]></category> <category><![CDATA[Web standards]]></category> <category><![CDATA[development]]></category> <category><![CDATA[legal]]></category> <category><![CDATA[legislation]]></category> <category><![CDATA[programming]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=58493</guid> <description><![CDATA[Would you continue your programming career if you could be sued for coding errors? Craig looks at legislation being considered in the UK and Europe.]]></description> <content:encoded><![CDATA[<p></p><p>An article which recently appeared on TechRepublic will strike fear into the heart of all developers and software manufacturers: <a
href="http://www.techrepublic.com/blog/european-technology/should-developers-be-sued-for-security-holes/1109"><em>Should developers be sued for security holes?</em></a></p><p>The question was posed by University of Cambridge security researcher Dr Richard Clayton. Software security losses cost billions per year and he wants vendors to accept responsibility for damage resulting from avoidable flaws in their applications. He argues that companies should not be able to rely on End-User License Agreements which waive liability.</p><p>While no legislation has been passed, committees in the UK and Europe have been considering the requirement for several years. Clayton wants applications to be assessed to consider whether the developer has been negligent. He argues that the threat of court action would provide an incentive to minimize security holes:</p><blockquote><p> If you went down to the corner of your street and started selling hamburgers to passers-by they can sue you [in the case of food poisoning].</p><p>It&#8217;s not going to be easy. There&#8217;s going to be a lot of moaning from everybody inside [the industry] and we&#8217;re going to have to do it on a global basis and over many years.<div
id='div-gpt-ad-1328644474660-10' style='width:728px; height:90px;'> <script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1328644474660-10'); });</script> </div></p></blockquote><p>Understandably, the software industry has fought back with several points:</p><ul><li>No one purposely makes insecure software, but the complexity of code can introduce unforeseen errors.</li><li>When a home is burgled, the victim doesn&#8217;t usually ask the maker of the door or window to compensate them.</li><li>Legislation would stifle innovation and manufacturers would prevent application interoperability to guard against undesirable results.</li><li>Who would be liable for open source software?</li></ul><h2>Litigious Lapses</h2><p>Clayton&#8217;s primary concern is security holes, but what does that mean? Bugs. It doesn&#8217;t matter whether they are caused by the coder&#8217;s inexperience, lack of testing or unforeseen circumstances owing to a combination of factors.</p><p>However the legislation is worded, if someone can sue for security issues, they can sue for any bug. Did an application crash before you saved 20 hours of data entry? Did an email or Twitter message reach an unintended recipient? Did Angry Birds cause distress by failing to update your high score?</p><h2>Burgers vs Browsers</h2><p>Let&#8217;s use Clayton&#8217;s burger analogy. Preparing a burger involves sourcing good-quality (OK &#8212; <em>acceptable</em> quality) meat and throwing any which is past its best. You won&#8217;t have problems if the ingredients are kept cool until required then cooked at a high enough temperature for a long enough time.</p><p>I don&#8217;t want to berate the fast food industry but there are a dozen variables and you only deal with two or three at a time. Nearly all are common sense &#8212; if the meat smells bad or looks green, it won&#8217;t be fit for human consumption. A burger costs a couple of dollars but, eat a bad one, and it will kill you.</p><p>Let&#8217;s compare it to a web browser. Conservatively, a browsing application could have 10,000 variables. There&#8217;s no linear path and each variable could be used at a different time in a different way depending on the situation. The browser is running on an operating system which could have one million lines of code and another 100 thousand variables. It could also be interacting with other software and running on a processor with its own instruction sets. It&#8217;s complex.</p><p>However, a browser is completely free at the point of use. It may be the worst application ever written. You may lose time, money and hair. <em>But no one will die</em>. There are risks, but are they more than outweighed by the commercial benefits?</p><h2>Terminal Software</h2><p>It is possible to limit programming flaws. Consider avionic software: a bug which caused a plane to fall out of the sky will lead to death. Failure is unacceptable.</p><p>Aircraft software development is rigid, fully documented, optimized for safety, thoroughly tested, reviewed by other teams and governed by legislation. It takes considerable time, effort and focus. Airbus won&#8217;t demand a cool new feature mid-way through coding. Boeing won&#8217;t rearrange interface controls one week before deployment.</p><p>The software is incredibly complex, but it&#8217;s one large application running on a closed system. The development cost is astronomical &#8212; yet failures still occur. They&#8217;re rare, but it&#8217;s impossible to test an infinite variety of situations in a finite period.</p><h2>Assessing Developer Negligence</h2><p>There&#8217;s only one way to learn programming: do it. Learning from your mistakes is a fundamental part of that process. You never stop learning. And you still make mistakes. I cringe when I examine code I wrote last week &hellip; applications written ten years ago scare the hell out of me.</p><p>While education is a start, it takes time, patience, and real-world problem solving to become a great developer. How could you gain that experience if you weren&#8217;t being paid? If you&#8217;re being paid, it stands to reason someone is using your software.</p><p>Anyone who thinks applications can be flaw-free has never written a program. Even if your code is perfect, the framework you&#8217;re using won&#8217;t be. Nor is the compiler/interpreter. What about the database, web server, operating system or internal processor instruction set?</p><p>But let&#8217;s assume lawyers found a way to legally assess developer negligence. Who in their right mind would want to become a programmer? Fewer people would enter the profession and daily rates would increase. Those developers prepared to accept the risk would have to adhere to avionic-like standards and pay hefty insurance premiums. Software costs would rise exponentially and become an expensive luxury for the privileged few.</p><p>Clayton&#8217;s proposal may be well-meaning but it doesn&#8217;t consider the consequences. His suggested legislation would kill the software industry. Ironically, that would solve all security flaws &#8212; <em>perhaps that would make him happy?</em></p><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/developers-sued-for-application-bugs/feed/</wfw:commentRss> <slash:comments>12</slash:comments> </item> <item><title>Is Your Browser Exposing Private Data?</title><link>http://www.sitepoint.com/new-tab-thumbnails-expose-private-data/</link> <comments>http://www.sitepoint.com/new-tab-thumbnails-expose-private-data/#comments</comments> <pubDate>Wed, 27 Jun 2012 14:48:16 +0000</pubDate> <dc:creator>Craig Buckler</dc:creator> <category><![CDATA[Community]]></category> <category><![CDATA[News]]></category> <category><![CDATA[Web security]]></category> <category><![CDATA[browser]]></category> <category><![CDATA[security]]></category> <category><![CDATA[tabs]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=56229</guid> <description><![CDATA[Is your browser's New Tab screen inadvertently leaking bank and webmail details to everyone using your PC? Craig looks at the latest browser security threat.]]></description> <content:encoded><![CDATA[<p></p><p>Several websites including <a
href="http://www.theregister.co.uk/2012/06/22/firefox_new_tab_security_concerns/">The Register</a> and <a
href="http://www.zdnet.com/blog/security/firefox-thumbnails-could-expose-private-data-fix-coming-soon/12568">ZDNet</a> have reported that Firefox 13&#8242;s new tab page is taking thumbnail snapshots of visited pages &#8212; including those during secure HTTPS sessions:</p><p><img
src="http://blogs.sitepointstatic.com/images/tech/688-firefox-13-newtab.png" alt="Firefox 13 new tab page" class="center" height="480" width="600" style="border:1px solid #333" /></p><p>The problem is not unique to Firefox; Chrome and Safari also generate thumbnails of HTTPS page content but their images are smaller and less readable. Firefox&#8217;s larger snapshots can reveal webmail and online banking sessions containing visible account numbers, balances and subject lines &#8212; even after you&#8217;ve logged out.</p><p>Fortunately, the thumbnails are generated by the browser and stored locally. No URLs or data is sent to servers and the images can be removed by clearing the history or clicking the &#8220;Hide the new tab page&#8221; icon at the top-right of the screen.</p><p>While the issue is unlikely to affect those with sole use of a single device, those using shared PCs should be wary. Firefox usually refreshes the new tab page after a browser restart so it&#8217;s best to use Private Browsing Mode during your session or the Clear Recent History option immediately after.</p><p>Mozilla has acknowledged the behavior and promised to release a patch shortly. But it&#8217;s a lesson for us all: if we&#8217;re not careful, seemingly innocent and useful software functionality can cause undesirable security side-effects.</p><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/new-tab-thumbnails-expose-private-data/feed/</wfw:commentRss> <slash:comments>19</slash:comments> </item> <item><title>12 CSS3 Vendor Prefix Crisis Myths</title><link>http://www.sitepoint.com/12-css3-vendor-prefix-crisis-myths/</link> <comments>http://www.sitepoint.com/12-css3-vendor-prefix-crisis-myths/#comments</comments> <pubDate>Tue, 12 Jun 2012 15:46:56 +0000</pubDate> <dc:creator>Craig Buckler</dc:creator> <category><![CDATA[Community]]></category> <category><![CDATA[CSS3]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[HTML5]]></category> <category><![CDATA[News]]></category> <category><![CDATA[Programming]]></category> <category><![CDATA[Web security]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[HTML5 Dev Center]]></category> <category><![CDATA[vendor prefixes]]></category> <category><![CDATA[w3c]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=54825</guid> <description><![CDATA[Craig shatters a dozen myths, fallacies and falsehoods about CSS3 vendor prefixes and the impending apocalypse.]]></description> <content:encoded><![CDATA[<p></p><p>CSS3 vendor prefixes and the impending apocalypse has been discussed at length on SitePoint since early 2012:</p><ul><li><a
href="http://www.sitepoint.com/w3c-css-webkit-prefix-crisis/">The Impending CSS Vendor Prefix Catastrophe</a></li><li><a
href="http://www.sitepoint.com/css3-vendor-prefix-crisis-solutions/">7 Solutions to the CSS3 Vendor Prefix Crisis</a></li><li><a
href="http://www.sitepoint.com/opera-css3-webkit-prefix/">Judgment Day Arrives: Opera Implements the CSS3 Webkit Prefix</a></li><li><a
href="http://www.sitepoint.com/css3-vendor-prefix-crisis-solutions-2/">Two New Proposals to Solve the CSS3 Vendor Prefix Crisis</a></li></ul><p>The issues are widely misunderstood &#8212; which is why we find ourselves in this mess. Hopefully, this article will shatter several vendor prefix crisis myths&hellip;</p><h2>1. The W3C Invents Standards&hellip;</h2><p>It doesn&#8217;t matter whether you&#8217;re inventing a CSS3 property, a wireless network protocol, an electricity socket or a company HR policy: <strong>nothing becomes a standard until it&#8217;s been implemented</strong>.</p><p>There is a widespread mis-belief that the W3C consists of HTML5 overlords who decree rules for everyone to follow. The W3C is not and never has been a web technology innovator. Browser vendors are responsible for inventing new CSS3 properties; these only become a standard when:<div
id='div-gpt-ad-1328644474660-10' style='width:728px; height:90px;'> <script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1328644474660-10'); });</script> </div></p><ol><li>the property is submitted to the W3C (all vendors have representatives who belong to the organization)</li><li>it&#8217;s generally agreed that it&#8217;s a good way forward</li><li>at least one other vendor implements the same feature.</li></ol><h2>2. &hellip;for Vendors to Follow</h2><p>If you decided to create a browser from scratch, you&#8217;d be advised to follow the W3C specifications. There&#8217;s nothing forcing to do that, but the documents define how other browsers work today. There are even documents which describe how browsers should render invalid HTML.</p><p>The specifications are a record of what&#8217;s been done &#8212; NOT what vendors must do. Once you have a working browser, you&#8217;re free to add whatever feature you like and submit it to the W3C for consideration.</p><h2>3. The W3C Approval Process Takes Too Long</h2><p>It takes as long as it needs.</p><p>Vendors are normally eager to seek W3C approval otherwise their efforts have been wasted. We all work on software products and know how frustrating disagreements can be, so consider how difficult it must be for five major competitors to evaluate and approve each others ideas.</p><p>However, remember that the final &#8220;W3C Recommendation&#8221; means a feature has been implemented in two or more browsers to the same level and no one has raised reasonable objections. The property may have been usable several years prior to that point.</p><h2>4. CSS3 Properties Shouldn&#8217;t be Available Until They&#8217;re a Standard</h2><p>Several developers have raised the notion that properties should be disabled or only present in nightly browser releases until they are standardized. Since a property must be implemented before it becomes a standard, <em>how can you wait for the standard before implementing a property?</em></p><p>The point of vendor prefixes is to evaluate feature implementation. If the feature was hidden in some way, it would receive little attention, evaluation would take longer and it wouldn&#8217;t become a W3C Recommendation in your lifetime.</p><p>You&#8217;re can wait for a property to become a standard, but&hellip;</p><ul><li>You&#8217;ll be missing out on some great features. <code>border-radius</code> has been available in all browsers without prefixes for a while, yet the <a
href="http://www.w3.org/TR/css3-background/">CSS Backgrounds and Borders Module Level 3</a> hasn&#8217;t reached the final W3C recommendation stage. You better go back to image slicing.</li><li>Once a property becomes a standard, there&#8217;s no guarantee it&#8217;ll be available everywhere. Most browsers are yet to implement all CSS2.1 features &#8212; and they&#8217;ve had 13 years to do it.</li></ul><h2>5. Vendor Prefixes == Beta Software</h2><p>Their is a widespread belief that vendor prefixes are comparable with beta software. It leads to the conclusion that prefixed properties are not recommended for production use. This is wrong.</p><p>Beta software is released for testing purposes to determine whether features work as intended. Vendor prefixes are used to evaluate the implementation of a new feature. The difference is subtle, but it&#8217;s important to understand that:</p><ul><li>While a vendor-prefixed property is pre-standard, it has been designed, documented, shared, coded and tested by the time it appears in your browser. There&#8217;s no guarantee it&#8217;ll remain the same or be implemented by other vendors, but it&#8217;s rare for a property to radically change or disappear. The worst case scenario is that the property is only ever available in one browser.</li><li>A vendor prefixed-property has undergone beta testing and the feature itself shouldn&#8217;t cause problems. If using a property caused a horrendous browser crash, that would be a software issue &#8212; not an issue with the property specification.</li><li>The only reason vendors don&#8217;t use the non-prefixed property name is to avoid implementation clashes during the early stages of vendor agreement. That might change if <a
href="http://www.sitepoint.com/css3-vendor-prefix-crisis-solutions-2/">Florian Rivoal&#8217;s proposal is accepted</a>.</li></ul><h2>6. Prefixes Aren&#8217;t Necessary</h2><p>Eradicating prefixes doesn&#8217;t solve the vendor prefix crisis. Property differences are rare but they do occur. In those circumstances, a property would become unusable if you couldn&#8217;t distinguish between two browser implementations.</p><p>There may be <a
href="http://www.sitepoint.com/css3-vendor-prefix-crisis-solutions-2/">better options</a> but prefixes solve a specific problem.</p><h2>7. JavaScript Doesn&#8217;t Have a Prefix Problem</h2><p>JavaScript, or ECMAScript, is an internationally agreed standard. The language has barely changed since its inception and, although more radical changes are coming, the different JavaScript engines are identical. Even known bugs are replicated.</p><p>However, JavaScript isn&#8217;t the problem. When developers complain about client-side coding, it&#8217;s generally the browser APIs causing grief. Those APIs are called by JavaScript code but they&#8217;re pre-defined objects within the browser &#8212; they&#8217;re not part of the language itself.</p><p>Be aware that vendor-prefixed JavaScript APIs such as <a
href="http://www.sitepoint.com/html5-full-screen-api/">full-screen</a> are already in-place and more are coming. However, it&#8217;s less of an issue since you can detect objects and fork accordingly. That&#8217;s not possible in CSS.</p><h2>8. SASS/SCSS/LESS/Another CSS Tool can Fix Everything</h2><p>There are several CSS scripting/macro languages which pre-compile rules into valid stylesheets. Most handle prefixes; you define a single standard property and the appropriate vendor prefixes are added automatically. It&#8217;s a great solution, but:</p><ul><li>Not everyone can install CSS pre-compilers since you require specific server-side languages or frameworks.</li><li>A CSS pre-compiler is only as good as its last update. Vendor prefixes change whenever a new browser is released &#8212; the software must keep pace or it&#8217;s useless.</li><li>It&#8217;s another syntax to learn; many developers are happy coding raw CSS.</li><li>CSS pre-compilers introduce their own set of problems. Any system which generates code can get it wrong and make debugging far more difficult.</li></ul><p>If you&#8217;re happy using a CSS toolkit that&#8217;s fine. But they&#8217;re not for everyone and only hide the vendor prefix problem. They don&#8217;t solve it.</p><h2>9. Webkit Leads the Pack&hellip;</h2><p>Webkit is one of the most active development groups and were first to implement some of the shinier CSS3 effects. But they don&#8217;t always lead the way:</p><ul><li>The <a
href="http://www.sitepoint.com/css3-calc-function/">CSS3 calc() function</a> has only just appeared in <a
href="http://www.sitepoint.com/chrome-19-whats-new/">Chrome 19</a> but is available in Firefox has been in IE9 for more than a year without a prefix.</li><li>Webkit&#8217;s background gradient implementation was horrendous. The W3C members eventually settled on Mozilla&#8217;s cleaner proposal.</li><li>Webkit does not support the <code>background-repeat</code> round and space properties; they&#8217;ve been in IE9 and Opera for many months.</li><li>Webkit&#8217;s SVG parser has fewer features and is often slower than the other engines.</li></ul><p>Other vendors contribute their fair share. Remember that webkit is used in Safari and Chrome; Apple and Google &#8212; the the world&#8217;s largest IT and web companies &#8212; regularly publicize new developments. The primary reason we&#8217;re in this mess is because some developers assumed webkit was the only important engine.</p><h2>10. &hellip;so a Single Rendering Engine Would Solve Everything</h2><p>A single rendering engine would make web developers&#8217; lives much easier. Many have suggested that a some type of legally-enforced browser monopoly is a good idea. If you agree, remember that your wish was granted a decade ago. There was one dominant browser; coding was easy and there was little need to worry about W3C standards. IE6 was the standard. <em>Should we ignore that historical lesson?</em></p><p>A single browser engine kills competition and evolution. The proposal fails to acknowledge several key issues:</p><ul><li>It&#8217;s impossible to enforce legally or practically on a global level.</li><li>Browser vendors are competitors. Two developers will disagree about a single feature proposal; would five competing companies work in harmony on one code base? Would Microsoft, Mozilla and Opera throw away a couple of decades work to adopt Webkit?</li><li>Vendors have different requirements and schedules. Assume Apple required a new iPhone-specific property. Would they wait for approval from Google, Microsoft, Mozilla and Opera? Or would they fork the engine and implement it regardless? Before you knew it, we&#8217;d have five separate engines again.</li><li>Many have suggested that vendors could still compete on &#8220;features&#8221;. However, the browser <em>is</em> the engine. Vendors have been actively culling superfluous bloat to create faster, slicker applications. What are all these features vendors would compete on?</li><li>One engine doesn&#8217;t mean one version. Even today, Chrome&#8217;s quicker release schedule results in it having a more recent edition of webkit than Safari.</li></ul><p>Despite having five major applications, development is easier than it&#8217;s ever been. The browser market is active, thriving and exciting again. I hope we never lose that.</p><h2>11. Vendors are to Blame</h2><p>Do vendors have a duty to developers? Or should their overriding concern be for millions of end users?</p><p>There have been instances when vendors have promoted prefixed properties as an HTML5 standard, but they do not purposely make our lives difficult. Prefixes solve more issues than they raise. The only reason we have a crisis now is because a subset of web developers failed to use -webkit, -moz, -ms, -o and non-prefixed CSS3 properties. It&#8217;s time to stop the whining and fix the problems in our code.</p><h2>12. Prefixes Were a Stupid Idea</h2><p>Vendor prefixes aren&#8217;t perfect. They are a solution which prevents two vendors implementing the same property in different ways and rendering it unusable. Perhaps they were a little naive, but it&#8217;s easy to spot drawbacks with the benefit of hindsight.</p><p>Better solutions will inevitably appear but, until then, we&#8217;re stuck with prefixes and its up to us to use them appropriately.</p><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/12-css3-vendor-prefix-crisis-myths/feed/</wfw:commentRss> <slash:comments>12</slash:comments> </item> <item><title>Is IBM Right to Ban Access to Cloud Applications?</title><link>http://www.sitepoint.com/ibm-ban-cloud-applications/</link> <comments>http://www.sitepoint.com/ibm-ban-cloud-applications/#comments</comments> <pubDate>Fri, 08 Jun 2012 17:43:26 +0000</pubDate> <dc:creator>Craig Buckler</dc:creator> <category><![CDATA[Business]]></category> <category><![CDATA[Community]]></category> <category><![CDATA[News]]></category> <category><![CDATA[Web hosting and domains]]></category> <category><![CDATA[Web security]]></category> <category><![CDATA[IBM]]></category> <category><![CDATA[security]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=55036</guid> <description><![CDATA[IBM has banned employees using cloud applications including Dropbox, Apple's iCloud and Microsoft Skydrive. Are they right to be concerned? Or is this a subtle marketing ploy? Craig discusses the issues in-depth.]]></description> <content:encoded><![CDATA[<p></p><p>IBM recently announced they had <a
href="http://www.technologyreview.com/business/40324/">banned employees using cloud-based applications</a> including Dropbox, Apple&#8217;s iCloud and Microsoft Skydrive. Even <a
href="http://edition.cnn.com/2012/05/23/tech/mobile/ibm-siri-ban/">Siri on the iPhone</a> is on the list since spoken queries could be stored and accessed by third parties.</p><p>The ban has been implemented following IBM&#8217;s policy of allowing employees to use their own devices. Personnel working outside the office could use their own hardware rather than depending on that provided by the company.</p><p>The policy did not reduce costs. It created new challenges since the software wasn&#8217;t controlled by IBM and many employees were unaware of the potential security risks of file sharing, open wifi and webmail systems. IBM&#8217;s primary fear was that confidential commercial information could be lost &#8212; especially when many of the popular solutions are operated by their direct competitors.</p><h2>The Cloud is Inherently Risky</h2><p>It doesn&#8217;t matter what claims are made, web-based applications have always been a security risk <em>(as recently demonstrated by LinkedIn)</em>. Few of us know where our data resides, how secure it is, or who can look at it. Even if you did know, your data is still sitting on a publicly accessible network; it&#8217;s a target for snoopers.<div
id='div-gpt-ad-1328644474660-10' style='width:728px; height:90px;'> <script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1328644474660-10'); });</script> </div></p><p>The only real security is the volume of data stored. If someone managed to access Dropbox&#8217;s back-end, it may be difficult to identify files belonging to a specific user. Locating a juicy document within many petabytes of data wouldn&#8217;t be easy.</p><h2>Reading Between the Lines</h2><p>I&#8217;m a little skeptical about IBMs announcement. If you&#8217;re really concerned about security, the last thing you do is reveal company policies. IBM claim to have banned Dropbox so you can guarantee a number of confidential documents were sitting on Dropbox&#8217;s servers at some point. They&#8217;re possibly still there.</p><p>In addition, IBM is an IT consultant &#8212; with their own cloud solutions offering <em>&#8220;security-rich virtual environments&#8221;</em>. In other words, you should consider hiring IBM because they understand the cloud and your company&#8217;s security concerns. Although it&#8217;s not stated directly, IBM has raised doubts about the services run by their competitors.</p><p>It&#8217;s a clever piece of indirect marketing which I&#8217;m helping to spread further!</p><h2>You Can&#8217;t Stop Human Nature</h2><p>In my opinion, IBM&#8217;s cloud-banning policy won&#8217;t work. If they expect employees to work outside the office, those people must copy confidential documents from IBM&#8217;s systems and put them elsewhere. If cloud applications are banned, employees will simply copy files to laptops or USB drives. Is that more secure?</p><p>IBM&#8217;s employees used Dropbox and other cloud applications because they were practical. It doesn&#8217;t matter what security protocols IBM puts in place; people will find ways circumvent those policies if it makes their working lives easier.</p><p>Does your company restrict cloud usage? Have you experienced data loss or security breaches using a web application? Comments welcome&hellip;</p><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/ibm-ban-cloud-applications/feed/</wfw:commentRss> <slash:comments>8</slash:comments> </item> <item><title>Why Your Site is Now Illegal in Europe</title><link>http://www.sitepoint.com/europe-website-cookie-privacy-law/</link> <comments>http://www.sitepoint.com/europe-website-cookie-privacy-law/#comments</comments> <pubDate>Mon, 28 May 2012 10:52:50 +0000</pubDate> <dc:creator>Craig Buckler</dc:creator> <category><![CDATA[Business]]></category> <category><![CDATA[Community]]></category> <category><![CDATA[Legal]]></category> <category><![CDATA[News]]></category> <category><![CDATA[Web security]]></category> <category><![CDATA[Web standards]]></category> <category><![CDATA[cookie]]></category> <category><![CDATA[European]]></category> <category><![CDATA[law]]></category> <category><![CDATA[legal]]></category> <category><![CDATA[legislation]]></category> <category><![CDATA[privacy]]></category> <category><![CDATA[tracking]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=55122</guid> <description><![CDATA[If you're using Google Analytics, cookies or other tracking technologies, you're probably operating illegally within Europe. Craig looks at the legislation, it's consequences and suggests practical steps you can take today.]]></description> <content:encoded><![CDATA[<p></p><p>As of May 26 2012, any website available to European visitors must comply with the EU E-Privacy Directive. New laws came into effect in 2011 which prevent identifying information being stored a user&#8217;s computer without their knowledge and consent.</p><p>If you&#8217;re using cookies or any other technologies for non-essential tracking, you must:</p><ol><li>Tell users that tracking technologies are used.</li><li>Explain the reasons for using those technologies.</li><li>Obtain the user&#8217;s consent prior to using that technology and allow them to withdraw permission at any time.</li></ol><p>The specific technology is not important. While cookies are an obvious target, the law applies to client-side storage, Flash cookies, image trackers, browser fingerprinting or any technology used to identify an individual.</p><p>A user&#8217;s consent must involve communication where the individual knowingly indicates their acceptance, e.g. clicking an icon or checkbox. Wherever possible, setting cookies must be delayed until a user has the opportunity to understand what technologies are being used and make an informed choice.</p><p>The only exceptions are sites where tracking is strictly necessary for the provision of a service or communication requested by the user. Shopping baskets, some online applications and client-side caching to improve page speed would not require authorization. Sites using analytics, advertising or customized greetings must comply.<div
id='div-gpt-ad-1328644474660-10' style='width:728px; height:90px;'> <script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1328644474660-10'); });</script> </div></p><p>The website setting a cookie is primarily responsible for compliance. However, in the case of third-party cookies, both parties have a responsibility to ensure users are informed about cookies and consent is obtained.</p><p>The law applies to European companies even if their website is hosted overseas. Organizations outside Europe with websites designed for the European market should consider that those users will expect information and choices about cookies to be provided (although legal enforcement is unlikely).</p><p>In essence, if you&#8217;re using Google Analytics without the user&#8217;s consent, your website is operating illegally in Europe.</p><h2>How Can You Comply?</h2><p>The UK&#8217;s Information Commissioner&#8217;s Office (ICO) admits the new rules require considerable work and makes the following recommendations:</p><ol><li>Audit your site&#8217;s tracking technologies and usage. Take the opportunity to remove unnecessary cookies.</li><li>Assess how intrusive that tracking is, i.e. is it an essential application session cookie or a one that has privacy implications.</li><li>Decide on what solution is best to obtain the user&#8217;s consent.</li></ol><p><a
href="http://www.bt.com/">British Telecom</a> has one of the better examples. On accessing <a
href="http://www.bt.com/">BT.com</a> for the first time, the user is presented with a pop-up message:</p><p><img
src="http://blogs.sitepointstatic.com/images/tech/683-eu-cookie-law-info.png" alt="BT cookie pop-up" class="center" /></p><p>The cookie option panel can be accessed from links in the pop-up or page footer:</p><p><img
src="http://blogs.sitepointstatic.com/images/tech/683-eu-cookie-law-optin.png" alt="BT cookie opt-in choices" class="center" /></p><p>Whether BT&#8217;s implementation abides with the law is another matter. The pop-up disappears after 12 seconds which won&#8217;t be enough for some users. In addition, full cookie approval is assumed if you don&#8217;t click the pop-up or footer link. The law clearly states that a user must knowingly indicate their acceptance; you cannot presume they understand or agree to your terms by their inaction.</p><p>The ICO&#8217;s <a
href="http://www.ico.gov.uk/news/blog/2012/~/media/documents/library/Privacy_and_electronic/Practical_application/cookies_guidance_v3.ashx">Guidance on the rules on use of cookies and similar technologies</a> offers pragmatic help. It&#8217;s a long read, but well-written in clear English.</p><h2>The Penalties</h2><p>In the UK, a fine of up to &pound;500,000 can be levied against companies deemed to be operating illegally.</p><p>However, the ICO will initially issue information and enforcement notices. This is understandable when you consider that few Government websites have implemented cookie-acceptance systems! Formal action will only be considered when an organization refuses to take steps to comply or is actively using privacy-intrusive technologies.</p><h2>The Practicalities</h2><p>Laws can only succeed if they&#8217;re clear and enforceable.</p><p>The current EU directive is intentionally vague because it&#8217;s almost impossible to legislate computer code and functionality which can be developed in an infinite number of ways. The onus is on organizations to determine whether they are breaking the law and take steps to rectify the situation. Unfortunately:</p><ul><li>Few website owners understand the issues or know whether they comply.</li><li>Web developers won&#8217;t necessarily know when and where cookies are used in a complex system.</li><li>Assessing the legality of individual cookies will be impossible until precedents are set.</li><li>The legislation has arrived very late and it&#8217;s impossible to police millions of websites.</li></ul><p>There will not be crack Government teams dedicated to hunting illegal websites; the ICO and equivalent bodies throughout Europe will respond to individual complaints.</p><p>But who will complain? An independent survey commissioned for the UK Government concluded that only 13% of users stated they fully understood cookies. 41% were unaware of different types of local storage and 37% admitted they had no idea how to manage cookies within a browser. Even when you know a cookie has been used, it&#8217;s impossible to determine whether it&#8217;s breaking privacy laws without accessing the back-end source code.</p><p>The ICO accepts the legislation will be difficult to enforce, but will act against any company flouting the spirit of the law.</p><h2>Open Season for Scammers</h2><p>While this law is aimed at protecting users, it&#8217;s scammers who gain the biggest benefit. If you&#8217;ve not been contacted yet, expect to see emails such as this appear in your inbox:</p><blockquote><p> Your website contravenes The European E-Privacy Directive 2009/136/EC. The legislation was passed in all European countries on May 25 2011 and your website fails to comply.</p><p>You must act immediately. To avoid a monetary penalty notice of up to &pound;500,000, please forward payment of &pound;10,000 to Korupt &amp; Vyle, Internet Solicitors, so we can advise further. If we do not receive payment within seven days, your company will be reported to the UK Government Information Commissioner&#8217;s Office and all EU regulatory bodies.</p></blockquote><p>Is this blackmail? Or is the scammer exercising their right to sell you compliance services before reporting you to the authorities for illegal activities? Put it this way, if you send enough emails, you&#8217;ll eventually find someone with enough naivety and cash.</p><h2>What Should You Do?</h2><p>If you&#8217;re using cookies or other tracking technologies for dubious purposes, you already know it and probably aren&#8217;t concerned about EU or any other laws. For everyone else, I suggest a simple approach:</p><ol><li>Ensure you have a privacy policy link in the footer of every page. You might want to change this to &#8220;Privacy Policy &amp; Cookie Usage&#8221;.</li><li>Explain your use of cookies and, where necessary, link to the privacy policies of third-party systems such as Google Analytics (<a
href="http://www.google.com/analytics/learn/privacy.html">google.com/analytics/learn/privacy.html</a>).</li><li>Rather than devise a complex opt-in system, link to cookie resource sites such as <a
href="http://www.aboutcookies.org/">aboutcookies.org</a> which explain how to block, control and delete cookies.</li><li>Do not respond to unsolicited emails offering cookie legislation help.</li><li>If you are contacted by a genuine regulatory body, work with them to identify any privacy breaches and devise solutions. They will not charge for that service.</li></ol><p>While the EU cookie directive may be dumb and unenforceable, it&#8217;s still a law. Unfortunately, common sense is not a legal defense.</p><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/europe-website-cookie-privacy-law/feed/</wfw:commentRss> <slash:comments>49</slash:comments> </item> <item><title>My Website&#8217;s Broken: 5 Steps to Determine What&#8217;s Wrong</title><link>http://www.sitepoint.com/5-steps-fix-broken-websites/</link> <comments>http://www.sitepoint.com/5-steps-fix-broken-websites/#comments</comments> <pubDate>Wed, 09 May 2012 15:30:03 +0000</pubDate> <dc:creator>Craig Buckler</dc:creator> <category><![CDATA[Business]]></category> <category><![CDATA[Programming]]></category> <category><![CDATA[Social media strategy]]></category> <category><![CDATA[Web hosting and domains]]></category> <category><![CDATA[Web security]]></category> <category><![CDATA[Web standards]]></category> <category><![CDATA[disaster recovery]]></category> <category><![CDATA[website]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=54311</guid> <description><![CDATA[Your website's down but you're convinced nothing has changed? Craig's 5-step guide could help diagnose those pesky performance problems.]]></description> <content:encoded><![CDATA[<p></p><p>We&#8217;ve all been there. Your wonderful website has been running successfully for months then &#8212; BAM &#8212; it disappears. Or, more often, certain features stop functioning. Despite your protests that nothing has changed, your client isn&#8217;t happy. Prepare yourself for a few frustrating hours of problem probing.</p><h2>Step 1: Identify the Issue</h2><p>This might sound obvious, but I&#8217;ve known many developers open their IDE and start hacking at random code. It&#8217;s more important to determine the issue than the cause at this stage. Is the site unavailable? Is a particular page or function failing? Is it limited to specific browsers?</p><h2>Step 2: Test Resource Availability</h2><p>Nine times out of ten, the problem will be caused by a connectivity issue at your end or the client&#8217;s. If you can&#8217;t access any other pages, it&#8217;s not surprising that your website has disappeared. That said, it&#8217;s not always obvious; certain IP ranges, countries or sections of the internet can become temporarily blocked.</p><p>Test your site from a variety of locations &#8212; a <a
href="http://www.publicproxyservers.com/">public proxy server</a> will help identify whether it&#8217;s a local or global problem. If possible, examine the status of other sites running from the same server or web host.<div
id='div-gpt-ad-1328644474660-10' style='width:728px; height:90px;'> <script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1328644474660-10'); });</script> </div></p><p>One less obvious problem is disk space. If you&#8217;re running a busy site, server logs can rapidly use the available space even when your application&#8217;s storage requirements are low.</p><p>Remember that you might be using resources on other servers. This includes CDN-hosted files, database servers, or remotely-hosted APIs such as those for Google Maps, YouTube, Twitter, advertising services etc.</p><p>You should also check your server loads. A major traffic spike or Denial of Service attack will cause access problems.</p><p>Finally, is your domain registration valid and is the DNS server responding as it should?</p><h2>Step 3: Identify What Changed</h2><p>Once you&#8217;ve rejected connectivity, traffic, DNS and disk space, it&#8217;s time to determine what changed. 999 times out of 1,000 the problem will have been caused by an update.</p><p>You may not have touched the files but are you sure others haven&#8217;t? Check with everyone who has access but don&#8217;t necessarily believe them. Here&#8217;s a typical conversation you&#8217;ll encounter&hellip;</p><p><strong>Client:</strong> My sites not working. What are you going to do about it?<br
/> <strong>You:</strong> I&#8217;ll fix it. Have you made any changes recently?<br
/> <strong>Client:</strong> No. It was like that when I got here.<br
/> <em>&hellip;five hour&#8217;s frantic investigation&hellip;</em><br
/> <strong>You:</strong> You changed X, didn&#8217;t you?<br
/> <strong>Client:</strong> X? Oh yes, I changed X. I did that when I was fiddling with Y and Z.</p><p>Your application may not be directly to blame. Has your web host updated the OS, language runtime, database software or file permissions? While vendors attempt to ensure PHP, Ruby, Python, MySQL, PostgreSQL, etc. remain backward compatible, features will almost certainly change or break between editions.</p><h2>Step 4: Reject the Edge Cases</h2><p>Although rare, you should look for signs of cracking. Software such as <a
href="http://www.sitepoint.com/10-wordpress-security-tips/">WordPress</a>, Joomla and OScommerce are obvious targets, however, changes are often subtle because the cracker wants to retain access. For example, you might discover that a file explorer add-on has been installed or phishing pages have appeared deep within the file structure.</p><p>Finally, you should never rule out hardware problems. Corrupt memory chips or disk sectors could be responsible for any number of bizarre issues. If possible, evaluate your application on a similar set-up or install a separate test version on the same server.</p><h2>Step 5: Fix Your App</h2><p>Once you have eliminated the impossible, whatever remains, however improbable, must be the truth. Perhaps your code isn&#8217;t as perfect as you thought&hellip;</p><p>Do you have any tips for diagnosing website or application problems? What was the most difficult issue you encountered?</p><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/5-steps-fix-broken-websites/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Does Google Drive Better than its Competitors?</title><link>http://www.sitepoint.com/google-drive-review/</link> <comments>http://www.sitepoint.com/google-drive-review/#comments</comments> <pubDate>Wed, 02 May 2012 15:21:20 +0000</pubDate> <dc:creator>Craig Buckler</dc:creator> <category><![CDATA[Java]]></category> <category><![CDATA[News]]></category> <category><![CDATA[Operating systems]]></category> <category><![CDATA[Programming]]></category> <category><![CDATA[Web hosting and domains]]></category> <category><![CDATA[Web security]]></category> <category><![CDATA[drive]]></category> <category><![CDATA[Dropbox]]></category> <category><![CDATA[file]]></category> <category><![CDATA[Google Tutorials & Articles]]></category> <category><![CDATA[synchronization]]></category> <guid
isPermaLink="false">http://www.sitepoint.com/?p=54150</guid> <description><![CDATA[Craig reviews Google Drive - a new service which takes aim at Dropbox, SkyDrive, iCloud and similar file synchronization applications.]]></description> <content:encoded><![CDATA[<p></p><p>Rumors of a Google cloud-based file storage service have been circulating since 2006 but Google Drive was finally released on April 24, 2012. That&#8217;s an unusually long gestation period for a company that normally releases first then tweaks (or abandons) later.</p><p>Google Drive is a direct competitor to established players such as <a
href="http://www.dropbox.com">Dropbox</a>, <a
href="http://www.sugarsync.com/">SugarSync</a>, <a
href="http://www.box.com/">Box</a>, <a
href="https://www.cubby.com/">Cubby</a>, <a
href="http://www.skydrive.com/">Microsoft SkyDrive</a> and <a
href="http://www.icloud.com/">Apple iCloud</a>. But is it better?</p><h2>Google Drive Features</h2><p><img
src="http://blogs.sitepointstatic.com/images/tech/668-google-drive-online.jpg" width="360" height="199" alt="Google Drive" class="right" /></p><p>It&#8217;s important to realize that Google Drive is a replacement for Google Docs (GDocs). Once you sign-up with your Google account, the <a
href="http://docs.google.com/">docs.google.com</a> URL will redirect to <a
href="http://docs.google.com/">drive.google.com</a>. The web interface is fundamentally the same and you can add, create, edit and delete files and folders as before.</p><p>Replacing GDocs is a clever idea. The projects are compatible and your cloud-based documents can be browsed from your desktop &#8212; an attractive feature for those migrating from Microsoft Office. It&#8217;s also apparent Google has learned lessons from <a
href="http://www.sitepoint.com/google-scraps-wave/">doomed projects such as Wave</a>; it&#8217;s easier to piggy-back on the success of an existing project than build a new user base from scratch. GDoc&#8217;s 40 million users have little reason not to adopt Google Drive.<div
id='div-gpt-ad-1328644474660-10' style='width:728px; height:90px;'> <script type='text/javascript'>googletag.cmd.push(function() { googletag.display('div-gpt-ad-1328644474660-10'); });</script> </div></p><p>To make the most of Google Drive, you need to install the desktop application on your PCs, tablets and smart phones. Native applications are currently available for Windows, Mac, Android and iOS but you can be certain that other platforms including Linux and Blackberry will appear shortly.</p><p>The desktop application creates a folder on your device. Its files and sub-folders are automatically synchronized to the web and your other devices. Google offer a generous 5GB of free space with competitive plans including 100GB for $60 per year.</p><p><img
src="http://blogs.sitepointstatic.com/images/tech/668-google-drive-desktop.png" width="522" height="379" alt="Google Drive" class="center" /></p><h2>How Does it Compare?</h2><p>Following sign-up, you&#8217;ll need to wait for around 24 hours before your existing Docs account is converted. I suspect Google will convert all accounts at some point in the future.</p><p>The desktop application is simple to install &#8212; assuming it doesn&#8217;t throw fatal errors. Many Windows users have reported similar experiences to me although installing <em>Microsoft&#8217;s Visual C++ 2008 SP1 Redistributable</em> rectified my issues. Once installed, there&#8217;s a little configuration to set the Google Drive folder and the application will run in the background so you can forget about it. On my system, it required a little over 30MB memory to execute &#8212; not horrendous, but Dropbox uses less than half that.</p><p>If you&#8217;ve used similar services you&#8217;ll understand how Google Drive works. The main difference is that you&#8217;ll find Google Docs files in your synchronized folder. Resources such as PDFs are downloaded as-is so you can open them directly.</p><p>Native Google documents are simply URL links which open the file in a browser. While that&#8217;s practical, it means you can&#8217;t open files offline and you don&#8217;t have a real backup in the event of connectivity or service problems. I&#8217;m not convinced it&#8217;s a major drawback but an option for automatic conversion to desktop formats such as TXT, RTF, DOC, ODT, XLS and PDF would be a bonus.</p><p>Finally, there&#8217;s the issue of trust. From an ownership perspective, the terms and conditions are clear:</p><blockquote><p>You retain ownership of any intellectual property rights that you hold in that content. In short, what belongs to you stays yours.</p></blockquote><p>Privacy is another matter&hellip;</p><blockquote><p>When you upload or otherwise submit content to our Services, you give Google (and those we work with) a worldwide license to use, host, store, reproduce, modify, create derivative works (such as those resulting from translations, adaptations or other changes we make so that your content works better with our Services), communicate, publish, publicly perform, publicly display and distribute such content. The rights you grant in this license are for the limited purpose of operating, promoting, and improving our Services, and to develop new ones. This license continues even if you stop using our Services.</p></blockquote><p>Could Google take a sneaky peek at your files to provide context-sensitive advertising? Put it this way, I suggest caution if you&#8217;re planning to upload documents containing personal information. But the same can be said for every online service since the dawn of the web.</p><h2>Google Docs Summary</h2><p>In essence, there&#8217;s little to distinguish Google Drive from its competitors. Google has copied the best features from Dropbox and, while that&#8217;s no bad thing, it doesn&#8217;t offer a compelling reason to switch. <em>Yet</em>.</p><p>More competition is great for users, though. Google may drive down storage prices and you can install different services concurrently to obtain many gigabytes of free backup space.</p><p><strong>Pros:</strong></p><ul><li>The service works.</li><li>Generous 5GB of free space and inexpensive storage plans.</li><li>Automatic Google Docs synchronization.</li><li>Google will evolve the product rapidly.</li></ul><p><strong>Cons:</strong></p><ul><li>Currently limited to Windows, Mac, iOS and Android platforms.</li><li>Some rough edges; application installation problems and less-efficient memory use.</li><li>Google document synchronization is a little kludgey.</li><li>Fewer features, no API and less capable than competing products.</li><li>Potential trust issues.</li></ul><p>Have you installed Google Drive? Do you prefer it to competing services? Should Dropbox be concerned? Do you trust Google keep their eyes off your data?</p><div
class='after-content-widget-1'><div
id="sitepointcontextualcontentmanagerwidget-5" class="widget widget_sitepointcontextualcontentmanagerwidget"><div
class="dfp-ad show-desktop"><div
id="div-gpt-ad-1340873946991-4" style="width: 728px; height: 90px;"> <script type="text/javascript">googletag.cmd.push(function() { googletag.display("div-gpt-ad-1340873946991-4"); });</script> </div></div></div></div>]]></content:encoded> <wfw:commentRss>http://www.sitepoint.com/google-drive-review/feed/</wfw:commentRss> <slash:comments>23</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using memcached
Database Caching 36/70 queries in 0.201 seconds using memcached
Object Caching 1925/2114 objects using memcached

Served from: www.sitepoint.com @ 2013-05-13 14:34:24 --