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

<channel>
	<title>MaaS360 Blog &#187; Engineering Excellence</title>
	<atom:link href="http://blog.maas360.com/topics/engineering-excellence/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.maas360.com</link>
	<description></description>
	<lastBuildDate>Wed, 16 May 2012 13:35:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>SaaS and Application Security: Best Practices for Code Injection</title>
		<link>http://blog.maas360.com/archives/cloudcomputing/saas-and-application-security-best-practices-for-code-injection/</link>
		<comments>http://blog.maas360.com/archives/cloudcomputing/saas-and-application-security-best-practices-for-code-injection/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 14:58:14 +0000</pubDate>
		<dc:creator>MaaS360</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Engineering Excellence]]></category>
		<category><![CDATA[Security Information]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[confidential information]]></category>
		<category><![CDATA[cookies]]></category>
		<category><![CDATA[data validation]]></category>
		<category><![CDATA[header data]]></category>
		<category><![CDATA[injection]]></category>
		<category><![CDATA[Java code]]></category>
		<category><![CDATA[operating system]]></category>
		<category><![CDATA[os]]></category>
		<category><![CDATA[parameter]]></category>
		<category><![CDATA[post data field]]></category>
		<category><![CDATA[sensitive information]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[web application]]></category>
		<category><![CDATA[web browser]]></category>
		<category><![CDATA[web page]]></category>

		<guid isPermaLink="false">http://blog.maas360.com/?p=2300</guid>
		<description><![CDATA[by Nitish Jha, Fiberlink Viewing a web page on a web browser has revolutionized the way information is shared, and is one of the most successful examples of the benefits of sustained investment and the commitment to research. Unfortunately, the power of the web is also its greatest downfall. The liberty of publishing your content, <a href="http://blog.maas360.com/archives/cloudcomputing/saas-and-application-security-best-practices-for-code-injection/" class="more-link">More &#62;</a><div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://blog.maas360.com/archives/cloudcomputing/saas-and-application-security-best-practices-for-code-injection/' addthis:title='SaaS and Application Security: Best Practices for Code Injection' ><a class="addthis_button_facebook"></a><a class="addthis_button_twitter"></a><a class="addthis_button_google"></a><a class="addthis_button_digg"></a><a class="addthis_button_stumbleupon"></a><a class="addthis_button_email"></a><a class="addthis_button_print"></a><a class="addthis_button_favorites"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.maas360.com/wp-content/uploads/2012/02/secureApp-300x300.jpg"><img class="alignright size-full wp-image-2303" title="secureApp-300x300" src="http://blog.maas360.com/wp-content/uploads/2012/02/secureApp-300x300.jpg" alt="" width="180" height="180" /></a>by Nitish Jha, Fiberlink</p>
<p>Viewing a web page on a web browser has revolutionized the way information is shared, and is one of the most successful examples of the benefits of sustained investment and the commitment to research. Unfortunately, the power of the web is also its greatest downfall. The liberty of publishing your content, with hardly any prerequisites, makes people vulnerable to the designs of certain extremely gifted individuals trying to phish confidential information out of your interactions with the system.</p>
<p>There is a case for users to be more careful while sharing sensitive information on the web. But, the responsibility of protecting its users lies solely with the entity (individual or organization) that publishes the application on the web. With organizational reputations on the line, companies have invested millions into building applications that are <em>safe</em> for users and themselves. The stakes are high!</p>
<p>As a web application developer it is extremely important to make sure that your application is not susceptible to any known or unknown threats posed by systems or humans. In this series of articles, we will analyze some of the common vulnerabilities infecting the world of web applications and application code. We will try to enforce the fact that web application security is much more than just using SSL. SSL can only protect the confidentiality and integrity of data moving back and forth between the client and the server. It does not protect against attacks that are targeted directly at either server or client – and that is where we will focus our attention.</p>
<p>We will kick off our series with a basic but crucial problem – <em>Injection.</em></p>
<h4><em></em>Injection</h4>
<p>In simple terms, an injection flaw is something that allows an attacker to insert and execute malicious or unintended code within your application. Depending on the system different types of injections may be performed. The two common flaws are at SQL or OS (operating system) level.</p>
<p>Here is an example. Assume we have a customer table with an <em>ID</em> column for storing the details of the customer. The HTTP request for this page looks something like this:</p>
<p><span style="color: #0000ff;">http://&lt;yourcompany&gt;/&lt;yourapp&gt;/getDetails?customer=1111</span></p>
<p>In the workflow, our code for fetching the details of the customer looks something like this:</p>
<p><span style="color: #4596ba;">String customerId = request.getParameter(“customer”);</span></p>
<p><span style="color: #4596ba;">String query = “select name, other_details_from_customer_table from customer where ID = ‘“ + customerId + “’”;</span></p>
<p>This is followed by the code to execute the query, fetch and return the data back to the browser. Once the attacker has access to the request URL of the page, it will be pretty easy for him to modify the parameters and resend the request back to the server. Assume the request is modified to look something like this:</p>
<p><span style="color: #0000ff;">http://&lt;yourcompany&gt;/&lt;yourapp&gt;/getDetails?customer=’ or ‘1’=’ 1</span></p>
<p>This changes the meaning of the entire workflow and returns the data for all of our customers!</p>
<p>In the worst cases of SQL injection, the attacker can execute a stored procedure that can do a lot more damage than the query stated above. At the OS level, it may even turn out to be the execution of a system command on the server.</p>
<p>Since SQL injection is performed at the database level, attackers may tamper with critical data and in some cases, may even destroy it. If the developer is not careful in the application design, the attacker may even end up executing administrator commands on the database.</p>
<p>Let’s look at an example of OS injection. Assume this is the (Java) code for our application:</p>
<p><span style="color: #4596ba;">//required imports&#8230;</span></p>
<p><span style="color: #4596ba;">public class HelloWorld{</span></p>
<p><span style="color: #4596ba;">          public string foo(String accountNumber){</span></p>
<p><span style="color: #4596ba;">                                  try {                                                              </span></p>
<p><span style="color: #4596ba;">                                                          Runtime rt = Runtime.getRuntime();</span></p>
<p><span style="color: #4596ba;">                                                          rt.exec(&#8220;/u001/some_dir/runscan.sh &#8221; + accountNumber);</span></p>
<p><span style="color: #4596ba;">                                  }catch(Exception e){</span></p>
<p><span style="color: #4596ba;">                                                          //all error handling here</span></p>
<p><span style="color: #4596ba;">                                  }</span></p>
<p><span style="color: #4596ba;">          }</span></p>
<p><span style="color: #4596ba;">}</span></p>
<p>The snippet of code above receives data from a feeder which does not validate the input <em>accountNumber</em>. The method <em>foo</em> accepts the inputs and executes a shell script on the command line with the input as an argument. So far, so good. Of course the developer didn’t anticipate that the input can be fed in with a lot more. Let us assume the method is invoked with the argument “<em>acct1 &amp; ps –aef”</em>. The script (<em>runscan.sh</em>) will get executed with <em>acct1</em>. But because of the <em>&amp;</em> in the input, a second command is appended. Thus, the system ends up executing the process status as well. A similar effect may also be achieved by using an input with a semi-colon. For example: “acct1 ; netstat –anp”.</p>
<p>Now, the g<em>ood </em>news. All this can be avoided without investing much time and effort. Here are some best practices for protecting against code injection attacks:</p>
<p>Any injection flaw is an indication of bad/incorrect data validation. This data could have arrived through a trusted or an untrusted source. Maybe your application was only meant for <em>real world users,</em> but nothing stops someone from writing a script (or creating a requestor client outside your application) that generates unanticipated scenarios. So, it is extremely important to not restrict yourself by the expected behaviour, usage or even the targeted audience. The workflow illustrated in the application UI is not the only usecase your application will be exposed to.</p>
<p>It is highly recommended that <em>untrusted or unvalidated data not be allowed to percolate down to the DB access layer or to the system layer through your application.</em> Many developers make an incorrect assumption that validating text fields is the only thing needed. The validation list, if one has to create it, is much more exhaustive. Cookies, header data, and post data fields are some of the most common vulnerable entities that hardly ever get the developer’s attention.</p>
<p>On the database level, using bind variables helps us in queries. Another recommended approach is the <em>use of stored procedures</em>. This forces the developer to define the SQL code first and then pass in the parameters. This reduces the possibility of generating queries on the fly like the one in the example above.</p>
<p>Another very good defence mechanism is <em>escaping all user-specified inputs.</em> Some of the Oracle database techniques used for this are discussed in detail <a href="http://www.orafaq.com/wiki/SQL_FAQ#How_does_one_escape_special_characters_when_writing_SQL_queries.3F">on this orafaq page</a>.</p>
<p>It is expected that the database setting will use SET DEFINE OFF or SET SCAN OFF. <em>Creating a specific database user, which does not own any DB object,</em> for the application is a good defence mechanism. This guards the allocation of only required grants to this user.</p>
<p>Last but not the least; <em>a proper code review</em> is the final step towards avoiding injection attacks against your application. A fresh set of eyes can catch vulnerable scenarios or lines of code, which you may think are safe or may have overlooked.</p>
<p>We will close at this point. I will be back with the next episode of this series. Until then, take another look at your code. Is your application secure? Will you bet your paycheck on it? Looking forward to hearing about your experiences of injection attacks and your defences against them.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://blog.maas360.com/archives/cloudcomputing/saas-and-application-security-best-practices-for-code-injection/' addthis:title='SaaS and Application Security: Best Practices for Code Injection' ><a class="addthis_button_facebook"></a><a class="addthis_button_twitter"></a><a class="addthis_button_google"></a><a class="addthis_button_digg"></a><a class="addthis_button_stumbleupon"></a><a class="addthis_button_email"></a><a class="addthis_button_print"></a><a class="addthis_button_favorites"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.maas360.com/archives/cloudcomputing/saas-and-application-security-best-practices-for-code-injection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ultrabooks Add to the Mobile Computing Revolution</title>
		<link>http://blog.maas360.com/archives/trendsandtechnology/ultrabooks-add-to-the-mobile-computing-revolution/</link>
		<comments>http://blog.maas360.com/archives/trendsandtechnology/ultrabooks-add-to-the-mobile-computing-revolution/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 20:37:39 +0000</pubDate>
		<dc:creator>MaaS360</dc:creator>
				<category><![CDATA[Emerging Trends and Technology]]></category>
		<category><![CDATA[Engineering Excellence]]></category>
		<category><![CDATA[News on the Move]]></category>
		<category><![CDATA[128GB]]></category>
		<category><![CDATA[anti-theft]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[dell]]></category>
		<category><![CDATA[desktop]]></category>
		<category><![CDATA[diplay]]></category>
		<category><![CDATA[IdeaPad]]></category>
		<category><![CDATA[Intel]]></category>
		<category><![CDATA[Ivy Bridge]]></category>
		<category><![CDATA[Lenovo]]></category>
		<category><![CDATA[low core voltage processor]]></category>
		<category><![CDATA[MacBook Air]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[mcafee]]></category>
		<category><![CDATA[mobile computing]]></category>
		<category><![CDATA[netbook]]></category>
		<category><![CDATA[pc]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[smartphone]]></category>
		<category><![CDATA[SSD]]></category>
		<category><![CDATA[tablet]]></category>
		<category><![CDATA[ultrabook]]></category>
		<category><![CDATA[Windows 8]]></category>
		<category><![CDATA[XPS13]]></category>
		<category><![CDATA[Yoga]]></category>

		<guid isPermaLink="false">http://blog.maas360.com/?p=2228</guid>
		<description><![CDATA[by Pragati Jain, Fiberlink First smartphones, then tablets&#8230;now ultrabooks. The mobile computing space has never been as dynamic and exciting as it is now. Over the course of recent years, mobile computing has improved in such a way that it has almost become a lifestyle. Ultrabooks are nothing new, and by no means an innovation in mobile <a href="http://blog.maas360.com/archives/trendsandtechnology/ultrabooks-add-to-the-mobile-computing-revolution/" class="more-link">More &#62;</a><div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://blog.maas360.com/archives/trendsandtechnology/ultrabooks-add-to-the-mobile-computing-revolution/' addthis:title='Ultrabooks Add to the Mobile Computing Revolution' ><a class="addthis_button_facebook"></a><a class="addthis_button_twitter"></a><a class="addthis_button_google"></a><a class="addthis_button_digg"></a><a class="addthis_button_stumbleupon"></a><a class="addthis_button_email"></a><a class="addthis_button_print"></a><a class="addthis_button_favorites"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.maas360.com/wp-content/uploads/2012/01/330534-ultrabook-consumer.jpg"><img class="alignright size-full wp-image-2235" title="Image source: http://www7.pcmag.com/media/images/330534-ultrabook-consumer.jpg?thumb=y" src="http://blog.maas360.com/wp-content/uploads/2012/01/330534-ultrabook-consumer.jpg" alt="Image source: http://www7.pcmag.com/media/images/330534-ultrabook-consumer.jpg?thumb=y" width="275" height="275" /></a>by Pragati Jain, Fiberlink</p>
<p>First <a href="http://maasters.maas360.com/forum/?forum=expertise&amp;value=smartphone&amp;type=1&amp;include=1&amp;search=1&amp;A=blog&amp;O=JH">smartphones</a>, then <a href="http://maasters.maas360.com/forum/?forum=expertise&amp;value=tablet&amp;type=1&amp;include=1&amp;search=1&amp;A=blog&amp;O=JH">tablets</a>&#8230;now ultrabooks. The mobile computing space has never been as dynamic and exciting as it is now. Over the course of recent years, mobile computing has improved in such a way that it has almost become a lifestyle.</p>
<p>Ultrabooks are nothing new, and by no means an innovation in mobile computing. They have always been around. Thanks to <a href="http://maasters.maas360.com/forum/?forum=expertise&amp;value=apple&amp;type=1&amp;include=1&amp;search=1&amp;A=blog&amp;O=JH">Apple</a>&#8216;s MacBook Air, the trend has gained considerable momentum. PC manufacturers have always wanted to give slim and high performance devices to the consumer, but Apple laid the foundation.</p>
<p>So what are these ultrabooks?</p>
<p>Ultrabooks can be defined in a few simple words: portable, slim stylish, and fast, with responsive computing interfaces. Like the MacBook Air, the ultrabooks are also powered by Intel low core voltage processors for efficient power consumption and long battery life. However, the two factors that distinguish the MacBook Air from ultrabooks are:</p>
<ol>
<li>Displays. Ultrabooks have a resolution of 1366 x 768 whereas the MacBook Air 13 has a resolution of 1440 x 900.</li>
<li>The Ultrabook Intel Core Processors are embedded with security and anti-theft protection technology. Mid-2012, Intel has plans to introduce the Ivy Bridge processors for powering ultrabooks. Not only will the Ivy Bridge processors ramp up performance, responsiveness, and visual display of the ultrabook, but it will upgrade the mobile computing security component. Intel plans to embed McAfee in its core processors for increased malware protection.</li>
</ol>
<p>Different ultrabook vendors have their own unique selling propositions to market their products. For example, Lenovo’s IdeaPad Yoga can be twisted to behave like a tablet; Dell’s XPS13 is 128GB solid-state drive and has a backlit keyboard; and Acer claims to have built the world’s thinnest ultrabook. In spite of different flavors of ultrabooks available to suit one’s needs, some of the factors that may hinder ultrabook adoption are:</p>
<ol>
<li>High prices. Ultrabooks are priced between 800 dollars and 1300 dollars. If the ultrabook manufacturers can keep a benchmark of 600-700 dollars, it will influence the number of consumers adopting ultrabooks.</li>
<li>Support for Windows 8 in workplaces: The 2012 ultrabooks are powered by the Microsoft Windows 8 operating system. Has your IT started or is considering supporting Windows 8?</li>
<li>If you like a heavy dose of CDs, DVDs and flash drives, ultrabooks aren&#8217;t for you. Ultrabooks, by definition, do not have any built-in hard drives; are powered with solid state drives (SSDs) for better speed and responsiveness; and have low power consumption.</li>
<li>The ultrabooks have no outlet or port for LAN support but the mini display port allows you to connect to any type of PC display.</li>
</ol>
<p>Many industry experts have deemed ultrabooks <a href="http://trials.maas360.com/forms/register_service_m.php?id=271&amp;A=blog&amp;O=JH">tablet contenders</a>. But I believe the ultrabooks will eat away at desktops and notebooks. Reason being, tablets and ultrabooks serve different purpose for different user groups. For example, tablets are great reading and entertainment devices for travelers, while the ultrabooks are an ideal pick for students or professors who are always on the move and are looking for high performance boxes. However, I believe, ‘device price’ and technology innovation will play a pivotal role in defining the future of each of these devices.</p>
<p>As the ultrabook revolution picks up the pace, I am already watching the market for new additions to pick one for myself. Are you too ready to dump your netbook or desktop for an ultrabook? Or maybe you own one&#8211;if so, please share with us your experiences and any ultrabook vendor recommendations.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://blog.maas360.com/archives/trendsandtechnology/ultrabooks-add-to-the-mobile-computing-revolution/' addthis:title='Ultrabooks Add to the Mobile Computing Revolution' ><a class="addthis_button_facebook"></a><a class="addthis_button_twitter"></a><a class="addthis_button_google"></a><a class="addthis_button_digg"></a><a class="addthis_button_stumbleupon"></a><a class="addthis_button_email"></a><a class="addthis_button_print"></a><a class="addthis_button_favorites"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.maas360.com/archives/trendsandtechnology/ultrabooks-add-to-the-mobile-computing-revolution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SaaS Application Customization Techniques</title>
		<link>http://blog.maas360.com/archives/cloudcomputing/saas-application-customization-techniques/</link>
		<comments>http://blog.maas360.com/archives/cloudcomputing/saas-application-customization-techniques/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 18:44:13 +0000</pubDate>
		<dc:creator>MaaS360</dc:creator>
				<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Engineering Excellence]]></category>
		<category><![CDATA[Mobile Device Management]]></category>
		<category><![CDATA[Mobility Management]]></category>
		<category><![CDATA[brand]]></category>
		<category><![CDATA[cascading style sheets]]></category>
		<category><![CDATA[color]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[currency]]></category>
		<category><![CDATA[customer]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[email template]]></category>
		<category><![CDATA[emails]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[font]]></category>
		<category><![CDATA[hard-coding]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[Internationalization]]></category>
		<category><![CDATA[JSP]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[link]]></category>
		<category><![CDATA[logo]]></category>
		<category><![CDATA[MaaS]]></category>
		<category><![CDATA[MaaS360]]></category>
		<category><![CDATA[mobility-as-a-service]]></category>
		<category><![CDATA[number]]></category>
		<category><![CDATA[partner]]></category>
		<category><![CDATA[programming language]]></category>
		<category><![CDATA[reseller]]></category>
		<category><![CDATA[role-based access]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[SaaS application]]></category>
		<category><![CDATA[signature]]></category>
		<category><![CDATA[software application]]></category>
		<category><![CDATA[Software as a service]]></category>
		<category><![CDATA[target market]]></category>
		<category><![CDATA[time]]></category>
		<category><![CDATA[translation]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[web pages]]></category>

		<guid isPermaLink="false">http://blog.maas360.com/?p=2163</guid>
		<description><![CDATA[by Ameya Kulkarni, Fiberlink Software-as-a-Service (SaaS) eliminates the need to install applications on the customer hardware. SaaS applications are typically accessed from a web browser and a single instance of the application often serves all the customers. Since the same application instance needs to fulfill different needs for different customers and there may be no <a href="http://blog.maas360.com/archives/cloudcomputing/saas-application-customization-techniques/" class="more-link">More &#62;</a><div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://blog.maas360.com/archives/cloudcomputing/saas-application-customization-techniques/' addthis:title='SaaS Application Customization Techniques' ><a class="addthis_button_facebook"></a><a class="addthis_button_twitter"></a><a class="addthis_button_google"></a><a class="addthis_button_digg"></a><a class="addthis_button_stumbleupon"></a><a class="addthis_button_email"></a><a class="addthis_button_print"></a><a class="addthis_button_favorites"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.maas360.com/wp-content/uploads/2012/01/img_blog_090211_300x3001.png"><img class="alignright size-full wp-image-2164" title="img_blog_090211_300x3001" src="http://blog.maas360.com/wp-content/uploads/2012/01/img_blog_090211_300x3001.png" alt="" width="250" height="250" /></a>by Ameya Kulkarni, Fiberlink</p>
<p><a href="http://www.maas360.com/why-maas360/saas-for-mobility-checklist/?A=blog&amp;O=JH">Software-as-a-Service (SaaS)</a> eliminates the need to install applications on the customer hardware. SaaS applications are typically accessed from a web browser and a single instance of the application often serves all the customers. Since the same application instance needs to fulfill different needs for different customers and there may be no option of creating a custom build for each customer, customizability of SaaS applications becomes an important aspect for delivering personalized software to the users. Customizability enables easy integration of the SaaS application with the customers existing systems and also empowers partners and resellers to easily configure the solution according to their and their customer’s requirements.</p>
<p>In one of our last posts, we discussed some of the <a href="http://blog.maas360.com/archives/engineering-excellence/key-design-principles-for-building-a-saas-product/?A=blog&amp;O=JH">key architecture tenets of a SaaS application</a> – multi-tenancy, customizability, scalability, and security. This post focuses on different customization techniques that we have used in MaaS360 to make it flexible and configurable to address our customers’ and partners’ needs.</p>
<p><strong>1. Look and Feel of a UI:</strong> Look and feel is one of the most important types of customizations for a SaaS product. <em>Why?</em></p>
<ul>
<li>Firstly, it provides an option to the customer or a partner to brand the software</li>
<li>Secondly, by changing the font, colors, and images used in the system, one can make it look similar to the existing systems that the user is familiar with</li>
</ul>
<p><em>So, how do you ensure that the look and feel of your application is customizable?</em></p>
<p><em></em><span style="line-height: 19px;">By using CSS (Cascading Style Sheets) for styling the web pages rather than hard-coding the styles within the HTML or JSP. </span></p>
<p>Create a set of CSS files that define the default look and feel of your application. For customization, these CSS files can be overridden at a reseller or customer level to personalize elements like colors, fonts, backgrounds etc. The application should pick up the appropriate CSS file based on the user. Images displayed on your web pages can also be customized by storing different images in the file system or the database and picking the relevant image based on the user context.</p>
<p>Apart from the web pages, emails sent by the system to the user can also be customized for content, sender, subject, logos, links and signatures. We highly recommend creating email templates for emails that need to be configured per customer requirements.</p>
<div><strong>2. Internationalization and Localization of UI as per Target Market:</strong> Internationalization (i18n) means designing software such that it can be easily adapted into different languages and regional differences of a target market i.e. it can be localized. For e.g. depending on a user’s locale, the software should be able to alter the date/time/number formats, currency, language and web page content etc&#8230;</div>
<p><em>So how does this work?</em></p>
<p><em></em>Most of the modern programming languages provide a library to format the date/time/number etc. based on a user’s locale. Make sure you are not hard-coding the display formats but format it based on the logged in user’s context and locale using the in-built functions.</p>
<p>Content localization can be achieved by using language resource bundles in your code. All the language specific content should be isolated from the web pages, so rather than hard-coding English strings in the web pages you should use constants that are replaced by the relevant text at runtime based on the user’s locale and language. If your application uses a database to display the content, the data model must be designed to store the content for each supported locale.</p>
<p><strong>3. Role-based Access:</strong> It is critical for a SaaS application to provide different levels of access for different users. For example, in the MaaS360 portal, a Master Administrator can create, publish and assign policies to devices whereas a Help Desk Engineer can only assign policies. Similarly, a customer must be able to customize a user’s role by adding/removing access to certain workflows. It is also important that all portal actions are audited with the user and time information.</p>
<p><a href="http://www.maas360.com/?A=blog&amp;O=JH">MaaS360</a> achieves this by adding support for role-based access in the application. A set of roles are defined for the application with each role having a set of permissions for different modules of the application. All the application modules check for the required permission before providing access to a workflow or functionality. A user can be assigned one or more roles. When a user logs in, he gets access to the workflows based on the roles assigned to him.</p>
<p>Customizability of a SaaS application can be a big pain if the above points are not well discussed and understood during the design and planning phase. By following these you can ensure that your application is ready for adoption by partners, resellers and customers.</p>
<p>Is your enterprise facing any specific issue while adopting customizability for your SaaS applications? Are there any points you would like to add? Looking forward to learning based on what you share from your experiences.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://blog.maas360.com/archives/cloudcomputing/saas-application-customization-techniques/' addthis:title='SaaS Application Customization Techniques' ><a class="addthis_button_facebook"></a><a class="addthis_button_twitter"></a><a class="addthis_button_google"></a><a class="addthis_button_digg"></a><a class="addthis_button_stumbleupon"></a><a class="addthis_button_email"></a><a class="addthis_button_print"></a><a class="addthis_button_favorites"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.maas360.com/archives/cloudcomputing/saas-application-customization-techniques/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kindle Fire vs. iPad 2, Round 2 Recap</title>
		<link>http://blog.maas360.com/archives/cloudcomputing/kindle-fire-vs-ipad-2-round-2-recap/</link>
		<comments>http://blog.maas360.com/archives/cloudcomputing/kindle-fire-vs-ipad-2-round-2-recap/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 18:29:15 +0000</pubDate>
		<dc:creator>MaaS360</dc:creator>
				<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Emerging Trends and Technology]]></category>
		<category><![CDATA[Endpoint Management]]></category>
		<category><![CDATA[Engineering Excellence]]></category>
		<category><![CDATA[3G]]></category>
		<category><![CDATA[adoption rate]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[battery]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[capacity]]></category>
		<category><![CDATA[iPad 2]]></category>
		<category><![CDATA[Kindle Fire]]></category>
		<category><![CDATA[MaaS360]]></category>
		<category><![CDATA[MDM]]></category>
		<category><![CDATA[operating system]]></category>
		<category><![CDATA[pc]]></category>
		<category><![CDATA[price]]></category>
		<category><![CDATA[processor]]></category>
		<category><![CDATA[reader]]></category>
		<category><![CDATA[recording]]></category>
		<category><![CDATA[Round 2]]></category>
		<category><![CDATA[smart devices]]></category>
		<category><![CDATA[smartphone]]></category>
		<category><![CDATA[tablet]]></category>
		<category><![CDATA[Thanksgiving]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[weight]]></category>
		<category><![CDATA[Wi-Fi]]></category>

		<guid isPermaLink="false">http://blog.maas360.com/?p=1980</guid>
		<description><![CDATA[by John Harrington, Fiberlink Now that we&#8217;ve (somehow) bounced back from the period of drowsiness synonymous with the Thanksgiving holiday, I invite you to jump right back into the action with me. Continuing from where we left off, I&#8217;m going to summarize how the kindle fire chalks up to the iPad 2 in terms of <a href="http://blog.maas360.com/archives/cloudcomputing/kindle-fire-vs-ipad-2-round-2-recap/" class="more-link">More &#62;</a><div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://blog.maas360.com/archives/cloudcomputing/kindle-fire-vs-ipad-2-round-2-recap/' addthis:title='Kindle Fire vs. iPad 2, Round 2 Recap' ><a class="addthis_button_facebook"></a><a class="addthis_button_twitter"></a><a class="addthis_button_google"></a><a class="addthis_button_digg"></a><a class="addthis_button_stumbleupon"></a><a class="addthis_button_email"></a><a class="addthis_button_print"></a><a class="addthis_button_favorites"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.maas360.com/wp-content/uploads/2011/11/RoundTwo1.png"><img class="alignright size-medium wp-image-1982" title="RoundTwo" src="http://blog.maas360.com/wp-content/uploads/2011/11/RoundTwo1-300x300.png" alt="" width="300" height="300" /></a>by John Harrington, Fiberlink</p>
<p>Now that we&#8217;ve (somehow) bounced back from the period of drowsiness synonymous with the Thanksgiving holiday, I invite you to jump right back into the action with me. Continuing from <a href="http://blog.maas360.com/archives/mobilitymanagement/kindle-fire-vs-ipad2-round-1-recap/?A=blog&amp;O=JH">where we left off</a>, I&#8217;m going to summarize how the kindle fire chalks up to the iPad 2 in terms of <em>tech specs</em>.</p>
<p>Chris Corbet opened Round 2 with a very interesting tablet fact, shared with us by a member of the 451 Group: <span style="text-decoration: underline;">The tablet took only <em>20 months</em> to ship 100 million devices, where the PC took 20 years and the smartphone 6 years</span>. The dramatic difference in rate of adoption makes our comparison between the kindle fire and iPad 2 all the more worth reading into&#8230;</p>
<p>Jon Dale took the first jab in this round breaking down the iPad 2. This tablet weighs in just over 1 pound and has different storage options depending on what you prefer. If you have to keep your content local to you, the iPad 2 can store up to 64 GB. On the other hand, if you&#8217;d like to keep your files off the hard drive you can go with the more inexpensive option with less capacity. No matter which you choose, you&#8217;ll have a 1 gigahertz processor and great battery life that lasts up to 10 hours with Wi-Fi enabled and 9 hours using 3G. Apple&#8217;s App Store makes over 100,000 apps available for you; no matter what you need to use the iPad for, rest assured there is an app out there that can help you get it done.</p>
<p>Donna Lima struck back with a description of the kindle fire, smaller in size and no doubt the underdog in this match-up. When compared with a standard tablet the fire is a little smaller, about the same size as the BlackBerry Playbook. It has a nice screen size for the readers and movie-junkies out there, but beware it is slightly heavier than the Kindle reader you may be used to. The speakers are situated right at the top of the device so the sound stays clear when watching films. This tablet comes with a modified Android OS, which doesn&#8217;t look like or function the same as what you may be used to with other Android operated devices (one of the only features you&#8217;ll find similar is the notifications bar).</p>
<p>The iPad 2 certainly got its punches in this round, as the fire relies mostly on your interaction with its touch screen. Bad news for iPad though: the fire&#8217;s screen is almost indestructible and only has one button for powering on and off (yet another adjustment Kindle owners will have to make). In terms of storage the fire does not compete with the iPad 2 by any means, but does make it easy to store your files on the cloud free of charge (easy to access the same files from phone or PC). Battery life is the only question mark that remains. Since this device is capable of doing so many things, it will take a few weeks to see which processes drain the battery the most. On a good day, the battery will last up to 8 hours. There&#8217;s no camera and not nearly as many apps, but the huge difference in price delivers a noteworthy blow to the iPad 2 at the end of this round.</p>
<p>So&#8230;let us know which tablet you&#8217;d pick based on this Round 2 comparison. If you haven&#8217;t made up your mind yet, read a <a href="http://blog.maas360.com/archives/businessintelligence/kindle-fire-vs-ipad-2-round-3-recap-2/?A=blog&amp;O=JH">recap of Round 3</a> or <a href="http://blog.maas360.com/archives/mobilitymanagement/kindle-fire-vs-ipad-2-final-round-recap/?A=blog&amp;O=JH">Round 4</a> and I&#8217;m sure you&#8217;ll be able to share something! If you don&#8217;t feel like reading you can <a href="http://bit.ly/showdownrecording">watch a recording of the event here</a>.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://blog.maas360.com/archives/cloudcomputing/kindle-fire-vs-ipad-2-round-2-recap/' addthis:title='Kindle Fire vs. iPad 2, Round 2 Recap' ><a class="addthis_button_facebook"></a><a class="addthis_button_twitter"></a><a class="addthis_button_google"></a><a class="addthis_button_digg"></a><a class="addthis_button_stumbleupon"></a><a class="addthis_button_email"></a><a class="addthis_button_print"></a><a class="addthis_button_favorites"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.maas360.com/archives/cloudcomputing/kindle-fire-vs-ipad-2-round-2-recap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Key Design Principles for Building a SaaS Product</title>
		<link>http://blog.maas360.com/archives/engineering-excellence/key-design-principles-for-building-a-saas-product/</link>
		<comments>http://blog.maas360.com/archives/engineering-excellence/key-design-principles-for-building-a-saas-product/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 20:14:24 +0000</pubDate>
		<dc:creator>MaaS360</dc:creator>
				<category><![CDATA[Engineering Excellence]]></category>
		<category><![CDATA[Application Security]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[Customization]]></category>
		<category><![CDATA[Multi-tenancy]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Software Design]]></category>

		<guid isPermaLink="false">http://blog.maas360.com/?p=1757</guid>
		<description><![CDATA[by Rahul Jain, Fiberlink With the increasing popularity and penetration of the cloud, SaaS (Software as a Service) is rapidly becoming the preferred software delivery model for organizations across the world &#8211; software buyers as well as vendors. With SaaS, software is hosted by the vendor (service provider) in the cloud and accessed by the <a href="http://blog.maas360.com/archives/engineering-excellence/key-design-principles-for-building-a-saas-product/" class="more-link">More &#62;</a><div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://blog.maas360.com/archives/engineering-excellence/key-design-principles-for-building-a-saas-product/' addthis:title='Key Design Principles for Building a SaaS Product' ><a class="addthis_button_facebook"></a><a class="addthis_button_twitter"></a><a class="addthis_button_google"></a><a class="addthis_button_digg"></a><a class="addthis_button_stumbleupon"></a><a class="addthis_button_email"></a><a class="addthis_button_print"></a><a class="addthis_button_favorites"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.maas360.com/wp-content/uploads/2011/09/img_blog_090211_300x3001.png"><img class="alignright size-full wp-image-1759" title="img_blog_090211_300x300" src="http://blog.maas360.com/wp-content/uploads/2011/09/img_blog_090211_300x3001.png" alt="" width="250" height="250" /></a>by Rahul Jain, Fiberlink</p>
<p>With the increasing popularity and penetration of the cloud, SaaS (Software as a Service) is rapidly becoming the preferred software delivery model for organizations across the world &#8211; software buyers as well as vendors. With SaaS, software is hosted by the vendor (service provider) in the cloud and accessed by the users over the Internet using a thin client e.g. a web-browser. There are many business benefits of adopting SaaS. For the customer, it means reduced cost of ownership, fast deployment, no maintenance headaches, and a smaller learning curve leading to a higher adoption rate in the user community. For the vendor, it means reduced cost of customer acquisitions, faster sales cycles, more upsell opportunities and an easier rollout of new features.</p>
<p>From an engineering perspective also, SaaS is a great way to build and deliver software. It is a perfect fit for software delivery teams that have adopted an agile development model. As the software is centrally hosted, you can:</p>
<ol>
<li>Deliver new features to your customers faster</li>
<li>Receive user feedback and implement changes in real time</li>
<li>Fix production issues quickly</li>
</ol>
<p>Also, you need not worry about any environment dependencies, different software versions, their<br />
upgrades, etc.</p>
<p>So, excited about building a SaaS product? OK, let&#8217;s see what you must know for building SaaS software. The following are the key architecture/design tenets of a SaaS product:</p>
<p><strong>Multi-tenancy:</strong></p>
<p>Multi-tenancy is the ability to serve different customers from a shared hardware or software instance. It gives you economics of scale by catering to a growing customer base without any significant increase in your resources. From a software design perspective, multi-tenancy influences all aspects of software including database model, application logic, user interface, etc.</p>
<p>At the database level, multi-tenancy can be achieved either by storing data for each customer in a separate schema or by partitioning the customer data by adding a customer qualifier field to all entities (i.e., Customer ID should be part of all tables as a primary key field). The second approach is straightforward and can be implemented very easily. It may suffice for systems that do not have a large volume of data. However, for systems that deal with large data volume it is best to store each customer’s data in a schema of its own. In both cases, you must spend some time building data access frameworks to hide the underlying data partitioning scheme from developers. This not only makes your developers&#8217; lives easier but also helps you to migrate from one scheme to another when the need arises.</p>
<p><strong>Scalability:</strong></p>
<p>Well, scalability is important for any software system worth its salt. However, it becomes extremely important for a SaaS system because any performance impact directly affects all your customers. If one of your customers starts uploading large volumes of data, it should not start impacting other customers. Database multi-tenancy discussed above takes care of scalability from the database operations side. To ensure that your application servers are scalable, you must ensure that your applications are cluster enabled and you can add cluster nodes as your data volumes grow. It is best to make all your application services stateless so that you do not need to worry about session persistence/replication, etc.</p>
<p>Another design principle to follow, while designing scalable systems, is modularizing your services. This not only makes your system more fault-tolerant but also allows you to scale the different components based on the number of requests each component receives. Another important tool you should exploit is cache. In a SaaS system there is a lot of data that is common across customers (e.g. country codes). Such meta data can be cached and be made accessible across the system. This will avoid unnecessary database operations and boost system performance.</p>
<p><strong>Security:</strong></p>
<p>As the data for all customers is stored in the same data-store, it is very important to ensure that one customer&#8217;s data is not accessible by another. This means deploying several levels of defenses. For instance:</p>
<ul>
<li>At the database level, you must encrypt all confidential data &#8211; preferably by using a unique key for each customer.</li>
<li>At the network level, you must ensure that all the communication happens on a secured channel (e.g., HTTPS should be used for all requests from the browser to application server).</li>
<li>At the application level, you must ensure that all the workflows authorize the user before granting access to any data. Authorization must be performed on the server side for each request rather than depending on the client for it. Also, ensure that your website conforms to security best practices.</li>
</ul>
<p><strong>Customizability:</strong></p>
<p>If you have been in the enterprise application space for more than a few months, you would know that no two customers are the same. Each customer has different requirements for data modeling, UI workflows, integration with legacy systems, etc. As a SaaS system developer, you should realize this early and ensure that the system provides customization capability for all important elements, e.g., the UI look and feel, data interchange formats, definition of entities and business logic, as well. When designing your data model, think how your users can extend it. When designing your business logic, think how the user can alter it. It is a good practice to model business logic as a template that can be changed by your users. When designing your UI look and feel, think of different themes, logos, icons, etc. Customization becomes very important if your business model involves partners to resell your solution; they&#8217;ll probably want to rebrand your solution and customize the workflows.</p>
<p>As a pioneer in the SaaS space, <a title="MaaS360" href="http://www.maas360.com?A=BLOG" target="_blank">MaaS360</a> has used these and some other design principles and has ensured that our applications are secure, scalable and <a href="http://blog.maas360.com/archives/cloudcomputing/saas-application-customization-techniques/?A=blog&amp;O=JH">customizable</a>. We&#8217;ll discuss these concepts in detail in the coming posts. Meanwhile, please share about your experiences of building/using SaaS solutions in the comments section.</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://blog.maas360.com/archives/engineering-excellence/key-design-principles-for-building-a-saas-product/' addthis:title='Key Design Principles for Building a SaaS Product' ><a class="addthis_button_facebook"></a><a class="addthis_button_twitter"></a><a class="addthis_button_google"></a><a class="addthis_button_digg"></a><a class="addthis_button_stumbleupon"></a><a class="addthis_button_email"></a><a class="addthis_button_print"></a><a class="addthis_button_favorites"></a><a class="addthis_button_compact"></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.maas360.com/archives/engineering-excellence/key-design-principles-for-building-a-saas-product/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

