Security Testing Web Applications Through Automated Software Tests
Security Testing Web Applications Through Automated Software Tests
Table of Contents
TABLE OF CONTENTS............................................................................................................ 2
1. ABSTRACT. ...................................................................................................................... 4
2. INTRODUCTION ............................................................................................................... 4
2.1 Introducing Automated Software Testing................................................................. 5
2.2 Use cases and Abuse cases....................................................................................... 6
4. INTRODUCING JUNIT...................................................................................................... 7
4.1 Advantages of using Unit Tests............................................................................... 11
4.2 Unit testing frameworks for popular languages..................................................... 11
Page 2 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
9. CONCLUSIONS .............................................................................................................. 22
REFERENCES ........................................................................................................................ 23
ACKNOWLEDGEMENT ......................................................................................................... 23
About The Author .................................................................................................................. 23
About Corsaire....................................................................................................................... 23
Page 3 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
1. Abstract
Testing software during the development phase has become an important part of the development
lifecycle and is key to the agile methodologies. Code quality and maintainability is increased by
adopting an integrated testing strategy that stresses unit tests, integration tests and acceptance tests
throughout the project. But these tests are typically only focused on the functional requirements of
the application, and rarely include security tests. Implementing security in the unit testing cycle means
investing more in developer awareness of security and how to test for security issues, and less in
specialised external resources. This is a long-term investment that can vastly improve the overall
quality of software, and reduce the number of vulnerabilities in web applications, and consequently,
the associated risks.
2. Introduction
Software development methodologies generally make a clear distinction between functional testing
and security testing. A security assessment of the application is usually performed towards the end of
the project; either after, or in parallel with user acceptance testing, and is almost always performed by
an external security testing team. This approach has a number of serious disadvantages:
The cost of addressing issues identified in the testing phases after the bulk of development is
complete is relatively high compared to fixing bugs identified during the development phase.
Developer involvement in testing is minimal, which means that the people with the best
understanding of the code are not involved with testing it.
Developer (and overall project) buy-in into the security process is minimised since it is perceived
as an external testing exercise performed by outside experts.
Even in Agile methodologies that stress the importance of continuous and integrated testing, security
is usually absent from the list of things to test. Developers tend to have their eyes fixed firmly on
meeting the functional requirements without paying much attention to the security requirements.
Page 4 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
Security testing is again implemented at the end of the project, negating a lot of the benefits of an
agile process.
Page 5 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
1
See reference: McGraw, 2006
Page 6 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
multiple layers and can allow virtually every method and every class in the application to be tested
which results in a high degree of test coverage.
4. Introducing JUnit
JUnit is a Java framework for performing unit tests based on the original Smalltalk SUnit framework.
Martin Fowler has said of JUnit: “Never in the field of software development was so much owed by so
many to so few lines of code.”
JUnit itself is a very simple framework, but the impact it has on the software development life cycle is
where its true value lies. On its own, JUnit is used to perform unit tests, but integrated with other
testing tools it can be used to perform integration and acceptance testing.
A simple example of using JUnit to test a method from a shopping cart class follows. Consider the
following interface for a shopping cart that is implemented by the Cart class:
interface CartInterface {
Iterator getAllCartItems();//Returns all the items in the cart
int getNumberOfItems(); //Returns the number of items in the cart
boolean containsItemId(String itemId); //Checks whether an item is already in
the cart
void addItem(Item item, boolean isInStock); //Adds an item
Page 7 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
Below is the implementation detail of the addItem method that accepts an item and a Boolean flag as
arguments and then adds the item to the cart. If the item is not in the cart, it is created and if it
already exists a quantity counter is incremented.
If we were to design a unit test for this method, the following tests should be considered:
Page 8 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
try {
instance.addItem(null, isInStock);
fail("Adding a null item did not throw an exception");
} catch (RuntimeException expected) {
assertTrue("null Item caught",true);
assertEquals("Null not in cart", instance.getNumberOfItems(), 0);
}
}
}
When this code is executed, JUnit will iterate through all the methods that start with the word “test”,
then first execute the setUp() method, then the “test” method, followed by the tearDown() method as
illustrated below.
Page 9 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
JUnit can execute the test methods in any order. A closer look at the testAddTwoItems() method will
illustrate how JUnit works. Firstly, a new shopping cart is created, then a new item is created and
added to the cart. Similarly, a second item is created and added to the cart. Next the containsItemId
method is called and the result stored in a variable. An “assertTrue” statement is made to ensure that
the return value was true. The same method call and assert statement is performed for the second
item. Finally another assert statement, this time “assertEquals”, checks that the number of items in
the cart is exactly 2.
The “assert” statements make assertions about the code, should any assertion fail, it would mean that
the particular test failed.
The testAddNullItem Method is an example of performing a simple test for exceptional conditions. It
is important to know how the cart will behave if a null item is added to it. The test checks to ensure
that an exception is thrown and that nothing was added to the cart.
JUnit is well supported in almost all Java IDEs as well as build tools such as Ant and Maven, this
facilitates the execution of tests as a simple extension to the debug cycle rather than a distinct testing
phase. Executing the above test case results in the following output:
The key to unit testing is that the writing and execution of tests is integrated into the development
process, rather than being a distinct phase, and they can be executed at any time to ensure that code
changes have not introduced regressions.
Page 10 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
Writing unit tests takes time and effort, but the benefits are substantial:
They provide more test coverage of the code than QA testing which only tests the application from
an external perspective.
They allow re-factoring of the code and prevent regression. Since they are automated, it is very
easy to run a test suite to ensure that all internal and external APIs function as expected after
code or component changes.
They allow teams of developers to work in parallel without having to wait for one team to complete
required modules.
They improve the design of the application by encouraging loosely coupled, pluggable
components.
They serve as living developer documentation to the code.
They reduce the time spent debugging because component flaws are easily and quickly identified.
They improve code quality because they encourage the developer to test for exceptional states
that could cause the code to fail, instead of only concentrating on the expected execution path.
2
A more list can be found at http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks
Page 11 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
requirements that are typically not included in the functional requirements. These non-functional
security requirements should be included in unit tests so as to provide a fast, accurate and repeatable
view of the security of the application at any point during the development process.
The matrix below presents an extract from an example security standard for a web application; and
indicates which type of software test is able to verify each of the controls. A security standard such
as this is essential in defining exactly how the application’s security functionality should behave.
Page 12 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
It is clear that the vast majority of controls can be tested using functional, and to a lesser extent,
integration testing techniques. Unit tests are only able to test a limited number of controls due to the
fact that, in typical applications, a lot of security functionality is provided by other modules, the web
server, or web container.
The next three sections will provide more detail on how to perform security tests in unit, integration
and acceptance tests.
Unit tests should only test a single class and should not rely on helper or dependent classes. Since
few classes exist in such a form of isolation it is usually necessary to create a “stub” or “mock” of the
helper class that only does what is expected by the calling class and no more. Using this technique
has the added benefit of allowing developers to complete modules in parallel without having to wait
for dependent modules to be completed. To enable this form of testing it is important that the code is
pluggable, this can be achieved by using the Inversion of Control (IoC) or Service Locator3 design
patterns. Pluggable code using these patterns is a worthy goal in itself and the ease with which they
allow tests to be performed is just one of their many advantages.
The number of security controls that can be verified through unit tests will depend largely on how
security services are implemented in the application. A control concerning the ciphers used for the
SSL session, for example, cannot be tested at the unit level since this is provided entirely by the
application server or web server. Similarly, services such as meta-character encoding and access
control could be implemented in the code, provided by a framework or by the application server.
Usually only the former case can be tested in isolated unit tests.
Validation of user-supplied data can be performed in a number of different areas in a web application.
To support modular application design, it is recommended that data validation be performed in the
domain object itself. The validation rules remain portable and will be executed even when the front
end of the application is changed. An example of performing validation testing using the Spring
framework and JUnit is provided below:
public class AccountValidatorTest extends TestCase {
private Account acc = null;
3
Inversion of Control Containers and the Dependency Injection Pattern by Martin Fowler:
http://www.martinfowler.com/articles/injection.html
Page 13 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
validator.validate(acc, errors);
assertFalse(number+" caused a validation error.",
errors.hasFieldErrors("phone"));
Page 14 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
When testing security functionality it is important that both valid input is accepted (a functional
requirement), and also that invalid and potentially dangerous data is rejected. Testing boundary and
unexpected conditions is essential for security tests.
6.4 Discussion
Implementing security tests at the Unit level is preferable to implementing the same tests at the
integration or acceptance level because the tests are executed very early on in the development
cycle. However, the number of security controls that can be tested as unit tests is limited by the fact
that the majority of security issues facing web applications are simply not visible at the single class
level.
There are primarily two ways to perform integration tests; using mock objects to provide a mock
implementation of the application server API, or by running the tests in an application server (in-
container testing). A number of projects4 ease the process of writing mock objects and provide
mechanisms for mocking common API’s such as the Java, Servlet and EJB APIs. Mock objects
provide a general way to perform integration testing in any environment.
In-container testing requires specific tools for specific containers, consequently there are fewer
options in this space. For J2EE testing popular choices are Apache Cactus
(http://jakarta.apache.org/cactus/) and TESTARE
(http://www.thekirschners.com/software/testare/testare.html).
Apache Cactus has become a standard testing tool for in-container testing of Java web applications.
It allows testing of web and EJB applications and includes convenience plugins for Jetty, Ant, Maven
and Eclipse. The disadvantage of using Cactus is that a container has to be started and stopped for
the tests to run, for lightweight products such as Jetty this takes a few seconds, but for full blown
J2EE containers this may be a lot longer.
4
See: http://www.mockobjects.com for more information
Page 15 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
access the resource the following code performs three tests: first to verify that admin users can
access the resource, then to verify that unauthenticated users cannot access the resource and lastly
it checks that users from other roles cannot access the resource.
Cactus works by implementing tests in the whole HTTP request-response conversation. The life
cycle of a single Cactus test is illustrated below.
Page 16 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
For each testXXX method specified in the test case, the following actions are taken:
Step 1. Execute beginXXX methods which setup client side data needed for the test, for example the
beingUnprivilegedUserAccessControl method above sets the authentication credentials for
HTTP BASIC authentication.
Step 2. Execute the setUp() method on the server side if it exists. This method is used execute test
code that is common to all server side tests. In the test case above, there is no such
common code.
Step 3. Execute the testXXX() method on the server side. This is where the core of the server side
testing is done. Tests are JUnit tests and follow the familiar format.
Step 4. Execute the tearDown() method which contains the common server side code to be executed
when a test has completed. In the example above, none was required.
Step 5. Execute the endXXX methods on the client side. In this step the results returned from the
server can be tested. The endUnauthenticatedAccessControl() method in the above test
case makes an assertion to ensure that the HTTP status code for the response was 401
(Unauthorised access).
7.4 Discussion
The integration layer offers many opportunities to test for security vulnerabilities since the complete
security feature set of the application is exposed and can be tested. Security tests that can be
performed at this layer include Injection flaws, Authentication bypass and Access Control tests.
In container testing is a powerful form of integration testing that allows realistic tests to be run against
the application because the testing is performed in a real application server. But this approach
suffers from the overhead of starting and stopping the application server, as well as a limited number
of testing frameworks. Although the number of security tests that can be performed at the integration
layer is much more than at the unit testing layer, there are still some issues which can’t be tested
such as Cross Site Scripting and services provided by a web server (e.g.: SSL, URL filtering).
Page 17 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
It is appropriate and common for developers to write integration tests, and in agile methodologies it is
also recommended that integration tests be executed at least daily5which will help identify issues
early on. Skilled developers who have undergone training in security testing techniques and who
understand software security issues will be well equipped to write security tests at this layer.
There are a number of testing tools available; the Java based tools typically use the HTTP functions
provided by the J2SE API or a custom HTTP client to perform the tests. They differ in how they
handle the presentation tier and the degree of low-level access to HTTP they offer. Since they act as
external HTTP clients, the language used by the client and that of the web application need not be
the same. Popular tools in this space, include HttpUnit, jWebUnit, HtmlUnit, Canoo Webtest and the
Ruby based WATIR project6.
Testing at the functional layer is more natural for a dedicated tester than a developer and since the
tests require full end-to-end functionality they can reasonably only be run towards the end of the
development process. Security testers are able to use the features of the functional tools to verify
and reproduce the results of a manual security assessment. This could greatly reduce the time
needed for retesting, since all the discovered vulnerabilities could be scripted during the initial
assessment.
5
http://www.martinfowler.com/articles/continuousIntegration.html
6
For a more complete list see: http://opensourcetesting.org/functional.php
Page 18 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
assertFormPresent("searchForm");
setFormElement("query", "<a id=\"injection\"
href=\"http://www.google.com>Injection</a>");
submit();
//If the link is present, it means injection succeeded, therefore our
test should fail
assertLinkNotPresent("injection");
}
}
jWebUnit follows the familiar JUnit format for tests and extends this with HTML and HTTP aware
functions. jWebUnit maintains an internal conversation state which keeps track of which page is
being viewed and manipulated. In the test case above, the testHtmlInjection method performs the
testing, most of the method calls are self explanatory. The setFormElement method is used to set the
value of a form field, in this case an attempt is made to insert an HTML link into the “query” value. If
the link is present after the form is submitted, then the test case should fail since the function is
susceptible to HTML injection.
8.3 WATIR
The Web Application Testing in Ruby tool takes a different approach to the aforementioned tools in
that it does not use its own HTTP client but instead drives an instance of Internet Explorer. This
approach means that tests are representative of how real world web clients behave. But it has the
disadvantage that low level tests (such as those testing at the HTTP level) have to be coded
manually.
Ruby is a high level dynamic scripting language which can be understood by non-developers and
programmers alike.
require 'unittests/setup'
require 'watir'
$APP_HOME = 'http://localhost:8080/ispatula'
$USERNAME = 'corsaire1'
$PASSWORD = 'corsaire1'
$SQL_CONCAT_USERNAME = 'corsaire\'+\'1'
def test_SQL_Blind_Injection()
$ie.goto($APP_HOME)
$ie.link(:url, /signonForm.do/).click
$ie.text_field(:name, 'username').set($USERNAME+'\' OR 1=1--')
$ie.form(:action, "/ispatula/shop/signon.do").submit
assert($ie.contains_text('Signon failed'));
end
def test_SQL_Injection_String_Concat()
$ie.goto($APP_HOME)
$ie.link(:url, /signonForm.do/).click
$ie.text_field(:name, 'username').set($SQL_CONCAT_USERNAME)
$ie.text_field(:name, 'password').set($PASSWORD)
$ie.form(:action, "/ispatula/shop/signon.do").submit
assert($ie.contains_text('Signon failed'));
end
Page 19 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
end
As with jUnit, test methods are labeled by starting the method name with the word “test”. The $ie
object holds a reference to Internet Explorer and provides access to the entire IE DOM.
The test_SQL_Blind_Injection method first navigates to the logon form by calling $ie.goto to access
the application start page, then it finds a link in the page that matches the regular expression
signonForm.do and clicks it. The text field with the name “username” is set to the value of:
corsaire1’ OR 1=1— and the form is submitted. Next, an assertion is made to ensure that the page
returned contains the text “Signon failed”, if it does the test passes and we know that the form is not
susceptible to this form of SQL injection.
The test_SQL_Injection_String_Concat method also tests for SQL injection, but uses a different
technique, that of concatenating strings in an SQL statement. It first navigates to the correct page,
then signs on with a username of: corsaire'+'1'. If the application is vulnerable to SQL injection then
that username will be concatenated to: “corsaire1” which is a valid username. Consequently, if the
login is successful, then the application is vulnerable to SQL injection and the test case should fail.
Consider an application that allows only administrative users to view all orders placed by accessing
the URL: /shop/listOrders.do. Should regular users attempt to access this resource they should be
redirected to the login page. The following test methods could be used to verify this behaviour:
def test_Access_Control_List_Orders_Unauthorised()
#First check unauthenticated access
logout
$ie.goto("https://localhost:8443/ispatula/shop/listOrders.do")
assert('Please enter your username')
end
def test_Access_Control_List_Orders_Normal_User()
#Check normal user access
login('corsaire1','corsaire1')
$ie.goto("https://localhost:8443/ispatula/shop/listOrders.do")
assert('Please enter your username')
end
def test_Access_Control_List_Orders_Admin()
#Check administrator access
login('admin','password')
$ie.goto("https://localhost:8443/ispatula/shop/listOrders.do")
assert('Administrative functions available')
end
The example application is susceptible to Cross Site Scripting in the search field, to test this, the
script will insert Javascript that opens a new window. Watir will then attempt to attach to the new
window, if the window does not exist then an exception will be thrown. Using the unit testing
framework’s “assert_raises” function, it’s possible to check whether this exception is raised or not.
def test_XSS_In_Search
$ie.goto('http://localhost:8080/ispatula/shop/index.do')
Page 20 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
$ie.text_field(:name,
'query').set('<script>window.open("http://localhost:8080/ispatula/help.html")</sc
ript>')
$ie.form(:action, /Search.do/).submit
assert_raises(Watir::Exception::NoMatchingWindowFoundException, "Search
field is susceptible to XSS") {
ie2 = Watir::IE.attach(:url,
"http://localhost:8080/ispatula/help.html")
}
end
8.7 Discussion
Security tests integrated into the acceptance test layer do not allow for as granular approach to
testing as unit or integration tests, but they do allow for full testing of the external API of the
application. Anything that can be tested during a black box security assessment of an application can
be tested for at the acceptance test layer.
External security testers that perform penetration tests and security assessments of applications can
use acceptance testing tools to script common vulnerabilities. This is not as useful in detecting
vulnerabilities, as it is in documenting and retesting vulnerabilities.
9. Conclusions
Unit testing of functional requirements of applications is already a well-established process in many
development methodologies and is strongly emphasised by the Agile methods. If developers are
trained in security then existing testing tools and techniques can be used to perform security testing.
External security testers can also make use of testing tools to document and automate discovered
vulnerabilities.
• At the unit test layer by developers to ensure that the security requirements of the application are
met, and that all failure and exceptional conditions are tested.
• At the integration test layer by developers and/or QA staff using either an in-container testing or
mock object strategy to ensure that security services provided by components and the application
server function as required and are free from common security vulnerabilities.
• At the acceptance test layer by security consultants and/or trained QA staff to ensure that the
external API of the application is free from security issues. The creation of functional tests can
accompany a manual security assessment of the application to provide an automated means of
verifying all vulnerabilities discovered. Automated security retests could then be executed at any
time with minimal overhead.
• Developers are more aware of security issues and understand how to test for them in their code.
• Security issues are discovered early on when development and debugging is ongoing meaning that
issues are addressed rapidly.
• Code is more robust since the tests can be executed at any point to confirm that changes have not
adversely affected the security of the application.
Page 21 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
• Code auditing is improved since the security standards or policies for web applications can be
compared to the tests executed against the application.
• Overall security awareness is improved since it is an integral part of the process rather than an
add-on.
Well-tested code that includes security tests results in an end product that is more robust, easier to
maintain, naturally self-documenting and more secure.
References
MASSOL, Vincent; HUSTED, Ted: JUnit in Action (Manning Publications co.; Greenwich, CT,
2004)
MCGRAW, Gary: Software Security (Addison-Wesley; 2006)
FOWLER, Martin: “Inversion of Control Containers and the Dependency Injection Pattern”
(http://www.martinfowler.com/articles/injection.html)
o “Continuous Integration”
(http://www.martinfowler.com/articles/continuousIntegration.html)
jWebUnit (http://jwebunit.sourceforge.net)
WATIR (http://wtr.rubyforge.org)
“Open source testing tools, news and discussion” (http://opensourcetesting.org)
Acknowledgement
This Guide was written by Stephen de Vries, Principal Consultant at Corsaire.
About Corsaire
Corsaire are experts at securing information systems. Through our commitment to excellence we help
organisations protect their information assets, whilst communicating more effectively. Whether they
are interacting with customers, employees, business partners or shareholders, our sound advice can
help our clients reduce corporate risk and achieve tangible value from their investments.
Privately founded in 1997 and with offices in the UK and Australia, Corsaire are known for our
personable service delivery and an ability to combine both technical and commercial aspects into a
Page 22 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions
Security Testing Web Applications through
Automated Software Tests
single business solution. With over nine years experience in providing information security solutions
to the UK Government's National Security Agencies, Government departments and major private and
non-profit sectors, we are considered a leading specialist in the delivery of information security
planning, assessment, implementation and management.
Corsaire take a holistic view to information security. We view both business and security objectives as
inseparable and work in partnership with our clients to achieve a cost-effective balance between the
two. Through our consultative, vendor-neutral methods we ensure that whatever solution is
recommended, an organisation will never be overexposed, nor carry the burden of unnecessary
technical measures.
Corsaire have one of the most respected and experienced teams of principal consultants available in
the industry and have consistently brought fresh ideas and innovation to the information security
arena. We take pride in being a knowledge-based organisation, but we don't just stop there. Through
a culture of knowledge-share, we are also committed to improving our client’s internal understanding
of security principles.
It is this approach to knowledge that differentiates us from most other information security
consultancies. As a mark of this, we are known globally through our active contribution to the security
research community, publishing papers and advisories on a regular basis. These we share freely with
our clients, providing them with immediate access to the most up-to-date information risk
management advice available, allowing them to minimise their exposure and gain an instant
competitive advantage.
Whilst it is imperative for us to offer a high level of security to our clients, we believe that it is of equal
bearing to provide a high level of service. At Corsaire our clients are not only protected but valued
too. We work hard at building strong relationships that are founded on the cornerstones of respect
and trust. With 80% of our customer base deriving from referrals we are certain that our clients value
the quality, flexibility and integrity that partnering with Corsaire brings.
Page 23 of 23
Security Testing Web Applications through Automated Software Tests
Copyright © 2000-2006 Corsaire Limited.
All Rights Reserved. The natural choice for information security solutions