blob: c357d525e80033fd867af74e33bec83eeba0cfc8 [file] [log] [blame]
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<title>Websh - Welcome</title>
<script language="JavaScript" src="buttons.js"></script>
<link href="websh.css" rel="styleSheet" type="text/css">
<meta name="description" content="Websh - the rapid development environment to build powerful web applications.">
<META NAME="keywords" CONTENT="websh, Websh, e-commerce, web application, apache, perl, php, asp, cold fusion">
<body marginwidth="0" marginheight="0" topmargin="0" leftmargin="0"
bgcolor="#ffffff" link="#006699" alink="red" vlink="#006699">
<map name="grafik_navi">
<area href="" coords="94,2,154,26" shape="rect">
<area href="./" coords="4,2,64,26" shape="rect">
<area href="contact.html" coords="184,2,244,26" shape="rect">
<table border="0" cellpadding="0" cellspacing="0" width="100%" height="76">
<tr valign="top">
<td width="500" bgcolor="#006699"><img height="50" width="300" src="images/grafik_navi_home.gif" alt="" border="0" usemap="#grafik_navi"><img height="50" width="200" src="images/grafik_index.gif" alt=""></td>
<td><img height="50" width="270" src="images/logo.gif" alt="Websh"></td>
<td width="5000" bgcolor="#000000">&nbsp;</td>
<td width="500">
<table border="0" cellpadding="0" cellspacing="0" width="500" height="40">
<tr bgcolor="#006699">
<td><a href="/websh/product.html" onmouseover="swap('prod','b_prod_b')" onmouseout="swap('prod','b_prod_a')"><img height="20" width="120" src="/websh/buttons/b_prod_a.gif" name="prod" border="0" alt="product description"></a></td>
<td width="100"><br></td>
<td><a href="/websh/support.html" onmouseover="swap('supp','b_supp_b')" onmouseout="swap('supp','b_supp_a')"><img height="20" width="70" src="/websh/buttons/b_supp_a.gif" name="supp" border="0" alt="support"></a></td>
<td><a href="/websh/resources.html" onmouseover="swap('ress','b_ress_b')" onmouseout="swap('ress','b_ress_a')"><img height="20" width="110" src="/websh/buttons/b_ress_a.gif" name="ress" border="0" alt="resources and links"></a></td>
<td><a href="/websh/download.html" onmouseover="swap('down','b_down_b')" onmouseout="swap('down','b_down_a')"><img height="20" width="100" src="/websh/buttons/b_down_a.gif" name="down" border="0" alt="download"></a></td>
<tr height="20">
<td width="120" height="20"><img height="20" width="120" src="images/title.gif"></td>
<td width="100" height="20"><img height="20" width="100" src="buttons/b_docu_c.gif"></td>
<td width="70" height="20"><img height="20" width="70" src="images/title.gif"></td>
<td width="110" height="20"><img height="20" width="110" src="images/title.gif"></td>
<td width="100" height="20"><img height="20" width="100" src="images/title.gif"></td>
<td><img height="40" width="270" src="images/logo_strich.gif"></td>
<div style="padding: 15px; color:#fff; background-color: #069; font-weight: bold; width: 730px; margin: 5px;">
We are sorry but we discontinued Websh support and development for lack of resources.
Also the discussion mailing list was closed, so if you're interested in taking up this subproject within the Apache Tcl project to bring it back into life please contact
<table border="0" cellpadding="0" cellspacing="0" width="770">
<tr height="30">
<td width="10" valign="top"></td>
<td width="150" height="30"></td>
<td width="610" height="30">
<h1>white paper</h1>
<tr valign="top">
<td width="10"><img height="1" border="0" width="10" src="images/stuntFFFFFF001010.gif"></td>
<td width="150">
<table border="0" cellpadding="0" cellspacing="0" width="141">
<tr valign="top">
<td width="10"><img height="11" width="10" src="images/pfeil.gif"></td>
<td class=nav>
<a href="/websh/docu.html"><b>documentation</b></a><br>
<tr valign="top">
<td width="10"><img height="11" width="10" src="images/pfeil.gif"></td>
<td class=nav>
<b>white paper</b><br>
<tr valign="top">
<td width="10"><img height="11" width="10" src="images/pfeil.gif"></td>
<td class=nav>
<a href="/websh/quickref.html"><b>quick reference</b></a><br>
<tr valign="top">
<td width="10"><img height="11" width="10" src="images/pfeil.gif"></td>
<td class=nav>
<a href="/websh/examples.html"><b>examples</b></a><br>
<td width="610">
<a name="1"><a href="#toc"><h1>1 Introduction</h1></a>
This white paper describes the key features of Websh, details it's
architecture, and motivates design decisions. The white paper gives
an overview of Websh and does not replace a technical reference.
Websh is a rapid development environment for building powerful and
reliable web applications. It is a standard Tcl extension and is
released as Open Source Software. Websh is versatile and handles
everything from HTML generation to data-base driven one-to-one page
customization. Netcetera, has been using it for years for virtually
all their customer projects, which are typically E-commerce shops or
electronic banking applications. Websh is extensible and portable,
and its comprehensive set of commands is easily learned. Websh can
be used in a standard CGI environment or as Apache 2 module. Websh
provides a set of commands for
<li>web transaction state management</li>
<li>session management (server-side sessions; various storage</li>
<li>HTML form handling</li>
<a name="toc"><a href="#toc"><h1>2 Table of Contents</h1></a>
<br>1&nbsp;<a href="#1"><b>Introduction</b></a><br>
<br>2&nbsp;<a href="#toc"><b>Table of Contents</b></a><br>
<br>3&nbsp;<a href="#28"><b>Architecture</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;3.1 <a href="#34"><b>based on Tcl</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;3.2 <a href="#73"><b>Tcl</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;3.3 <a href="#139"><b>Environment</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;3.4 <a href="#203"><b>Design</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.4.1 <a href="#"><b>request and URL management</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.4.2 <a href="#"><b>session context management</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.4.3 <a href="#"><b>output management</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.4.4 <a href="#"><b>conversion</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.4.5 <a href="#"><b>security by encryption</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.4.6 <a href="#"><b>messages on streams</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.4.7 <a href="#"><b>logging facility</b></a><br>
<br>4&nbsp;<a href="#400"><b>Hello, world!</b></a><br>
<br>5&nbsp;<a href="#416"><b>Flow of control</b></a><br>
<br>6&nbsp;<a href="#467"><b>Commands</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;6.1 <a href="#474"><b>request and url management</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;6.2 <a href="#484"><b>session management</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;6.3 <a href="#490"><b>output management</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;6.4 <a href="#497"><b>conversion</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;6.5 <a href="#506"><b>messages</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;6.6 <a href="#512"><b>encryption</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;6.7 <a href="#517"><b>logging</b></a><br>
&nbsp;&nbsp;&nbsp;&nbsp;6.8 <a href="#523"><b>misc</b></a><br>
<br>7&nbsp;<a href="#533"><b>Security issues</b></a><br>
<br>8&nbsp;<a href="#609"><b>Requirements</b></a><br>
<br>9&nbsp;<a href="# "><b>Copyright</b></a><br>
<a name="28"><a href="#toc"><h1>3 Architecture</h1></a>
Websh is a standard Tcl extension, written in C and in Tcl.
It is strictly modularized and thread safe. This section
gives an overview of the Websh architecture.
<a name="34"><a href="#toc"><h2>3.1 based on Tcl</h2></a>
Websh is based on the Tool Command Language (Tcl). Tcl is a fast,
comprehensive scripting language as well as a library.
The decision to build Websh on top of Tcl has several
advantages which can be summarized with
&quot;flexibility&quot;: configurability, extensability, and portability.
This is illustrated in Figure 1.
<center><img src="images/ws3ov.gif" alt=""></center><br>
<b>Figure 1</b> - Websh Architecture <br><br>
Most Web-based applications need to separate items with a high change
rate from other, static parts. Often, the rapidly changing components
are those related to any aspect of output rendering (e.g., HTML
generation) and input processing. Application logic, on the other
hand, remains rather constant. Therefore, Web-based applications need
to support easy modification of the frequently changing parts. For
example, one wishes to modify HTML output without the need to
recompile the entire application. This means that a high level of
configuration flexibility is needed.
Using Tcl as an embedded system, such configurable parts can be
designed as Tcl code snipplets, configuration files and so on. The
application can call and interpret Tcl code whenever necessary. The
Tcl code itself can call back the C-based application and use the
library routines. This offers a high degree of scalablity.
Using a scripting language for web application development thus has
many advantages over traditional approaches. The potential drawback
of an interpreted language is slower execution as compared with a
compiled program. Experience has shown, however, that the advantage
of flexibility is much more important than these potential differences
in execution speed.
<a name="73"><a href="#toc"><h2>3.2 Tcl</h2></a>
The Tool Command Language (Tcl, pronounced &quot;tickle&quot;), was created by
John Ousterhout. Tcl development started 1987 at the University
of California at Berkeley. Today, Ousterhout is CEO of &quot;Scriptics
Corporation&quot;, which continues to develop Tcl, and markets value added
products for Tcl. Worldwide, about half a million programmers rely on
The Tcl platform was designed with the philosophy in mind
that one should actually
use two or more languages when designing large software systems. One for
manipulating complex internal data structures or where performance is key,
and another, such as Tcl, for writing smallish scripts that tie together
the other pieces, providing hooks for the user to extend.
For the Tcl-script writer, ease of learning, ease of programming and
ease of glueing are more important than performance or facilities for
complex data structures and algorithms. Tcl was designed to make it
easy to drop into a lower language when you come across tasks that
make more sense at a lower level. In this way, the core functionality
can remain small and one needs only to bring along pieces that one
particularly wants or needs.
Tcl is actually two things: a language and a library. First, Tcl is a
powerful textual language, intended primarily for issuing commands to
interactive programs such as text editors, debuggers, illustrators,
and shells. It has a simple syntax and is programmable, allowing Tcl
users to write command procedures to extend the built-in set of
commands. Further more, the library provides a wide range of
functions for OS abstraction and container management, which can be
used without the Tcl language itself.
Second, Tcl is a library package that can be embedded in application
programs. The Tcl library consists of a parser for the Tcl language,
routines to implement the Tcl built-in commands, and procedures that allow
applications to extend Tcl. The application program generates Tcl
commands and passes them to the Tcl parser for execution. The parser
executes built-in commands directly, and uses the call-back method for
application-specific commands.
This design allows three-tiered applications, having a middle-tier that
represents &quot;business objects&quot;. The middle tier is the C-application, while
the third tier consists mainly of the Tcl code, which renders various views
of the business objects for the display e.g. in browsers. Embedding Tcl
gives Websh the flexibility needed in Web environments. It allows
combining state-of-the-art software engineering with the speed of HTML
publishing and separates these two development cycles.
Tcl has been ported to all major operating systems. It is easily
extensible, and Tcl extensions like Websh can profit from
third-party extensions as well. Additional functionality, e.g.,
application-specific commands written in C/C++, can be dynamically
added using shared libraries (on Unix platforms) or dynamic link
libraries (Microsoft Windows platforms). Such libraries are used, for
example, for database connectivity. This makes change management much
easier, since modules are clearly separated, ensures quick loading of
code, and does not affect a running system.
<a name="139"><a href="#toc"><h2>3.3 Environment</h2></a>
Websh is a Tcl extension. It can be run as a stand-alone application,
or it can be dynamically loaded into a Tcl application. In a Web
environment, Websh is run in a CGI environment (Common Gateway
Interface) or as Apache 2 module.
Websh has been designed to ease the implementation of dynamic
content within WWW servers. There are several techniques in use to
provide such dynamic content:
<li>Server-side includes (SSI): This technique is available with several</li>
WWW servers (HTTP servers). It based on a custom extension to
HTML, which is parsed by the server whenever the corresponding
document is requested. These extensions contain directives for
conditional text and text substitution. This technique is only
suitable for applications where text substitution is possible,
that is, for simple replacements in the document. It also strongly
depends on the server software used, as there is no widely
accepted standard for the syntax. Products using this technique
include ASP or JSP.
<li>Custom HTTP servers: Most off-the-shelf WWW-servers serve static</li>
contents from a repository, which typically is a file system or a
database management system. It might make sense for some
applications to manage the HTTP-protocol themselves, i.e., to act
as custom HTTP servers, having the full freedom on how the results
of HTTP requests are returned. This technique is the most
flexible. However, there is much application overhead introduced
in properly (and efficiently) handling HTTP-requests, that this
method is only sensible for very specific applications.
<li>CGI-Applications: Often dynamic content is managed using the Common</li>
Gateway Interface (CGI). The widespread use of CGI is basically
due to its simplicity. The CGI specification relies on
POSIX-compliant execution of child processes. Parameter passing
happens via command line arguments, environment variables and
standard I/O. CGI has become the most popular technique for
dynamic content because it is standardized (not by an official
standardization body, but as an &quot;industry-standard&quot;).
<li>Embedded handlers and modules: Most current WWW server software</li>
products support a direct extension through a specific API (e.g.,
NSAPI for Netscape products, ISAPI with Microsoft Information
Server, &quot;modules&quot; for Apache-based Products). This method is
probably the most efficient, since there is a tight binding
between server and extension. On the other hand, this solution is
dependent on the WWW server used. Java servlets can be considered
to fall into this category.
Websh employes the latter two techniques. Its CGI interface
ensures that Websh can be employed virtually anywhere, using
off-the-shelf web servers. If performance is key, Websh can be run
as a Apache 2 module. In this case, the server does not spend time
spawning child processes, and communication between web server and
Websh directly uses the Apache API, which is considerably faster
than in the CGI case. In addition, Websh applications can be split
into two parts, the command definition and the command call part, and
Apache 2 can keep the command definition part in memory. This
eliminates the need to re-read most parts of a Websh application
for every HTTP request, and further increases the responsivness of the
Websh application.
<a name="203"><a href="#toc"><h2>3.4 Design</h2></a>
Websh is strictly modularized, particularly for thread safety. Each
module manages its own data, and locking mechanisms are used where
needed. Websh modules are extensible through plug-Ins. This
section gives an overview of the Websh modules and shortly
describes their function and design.
<dt><b>request and url management</b>
handles input from the HTTP protocol, and state
<dt><b>session management</b>
session data handling. On the client-side using Netscape cookies,
and on the server-side using various storage managers
(file system, data base, main-memory chache)
<dt><b>output management</b>
sending data back to the browser
HTML- and URI-compliant encoding of data
security by strong encryption
communication over TCP/IP sockets
distribution of log messages
The Websh design is illustrated in Figure 2.
<center><img src="images/ws3arch.gif" alt=""></center><br>
<b>Figure 2</b> - Websh Design <br><br>
<a name=""><a href="#toc"><h3>3.4.1 request and URL management</h3></a>
The Websh application developer does not need to get involved with the
details of the HTTP protocol or the parsing of data. Rather, he
concentrates on the application logic and leaves the rest to Websh.
This module parses input from the browser, e.g. HTML form data, and makes it
available to Websh. In addition, it adds state to the HTTP protocol
using the querystring.
One of the distinctive features of Websh is its state management
capability. HTTP as a protocol is usually stateless (unless the secure
variant SSL is used). By protocol definition, there is no information
which lives from access to access. This design has many advantages, like
simple client-server application design. If state is needed, however, it
makes application development more difficult.
Web-based applications often need to carry information from one HTTP
transaction to the next. As an example, a user might have a preferred
language. Applications for electronic commerce systems, Internet
banking an so on also need mechanisms to identify and group
transactions into longer transactions which cover more than one single
HTTP request and its response. In other words, state needs to be
Typically, there are three methods in use to identify state:
<li>Encoding of state information in the URL</li>
<li>Encoding of state information in hidden form fields</li>
<li>Using Netscape Cookies.</li>
Websh is designed to use all of these methods. However, the first is
Webshs preferred method. The reason to rely mainly on the URL is that
both hidden form fields and cookies have disadvantages:
<li>Hidden fields are only usable in forms. However, there are </li>
frequently cases
where state needs to be preserved without explicitly requiring
forms. Moreover, the state might be required to be &quot;bookmarkable&quot;
<li>Firewall setups can filter cookie information from the HTTP-stream in</li>
order to avoid external information from entering an organization.
Also, the user can disable cookies, and not all browsers
support cookies.
URL encoding, on the other hand, has the disadvantage that it produces
somewhat long URLs. Experience has shown that the advantages more
than compensate for this drawback.
<a name=""><a href="#toc"><h3>3.4.2 session context management</h3></a>
We have described above why web applications need state information.
Often, more information is needed than simply preferences. In these
cases, Websh relies on its session management module.
The session management module handles session data, which can be stored on
the client side using Netscape cookies, or on the server side using the
file system (fs), a data base management system (DBMS), or the Netcetera
cache manager (ncm). The module provides a uniform interface to access the
session context regardless of the storage used. It is implemented in Tcl
and makes extensive use of namespaces.
<a name=""><a href="#toc"><h3>3.4.3 output management</h3></a>
Websh provides a set of commands to format HTTP-compliant output to
be sent back to the client. Output can be directed to Tcl channels or to
Tcl variables for buffering purposes. The technique of buffering output is
typically used to prepend additional information to the output
after the data have been processed. For example, one would like a table
of contents to a text document.
Also this module has been designed with the philosophy in mind
that the application developer does not need to
care about the details of the HTTP protocol. As an example, he does not
track whether the MIME headers have been sent or not. Websh takes care
of that.
If the developer needs control over the HTTP output, the configuration
facility of the output management module gives her full control over the
output. Of course, the output module is fully configurable, as are
all Websh modules.
<a name=""><a href="#toc"><h3>3.4.4 conversion</h3></a>
Need HTML compliant input ? Want to send data via URL, or in a form
field ? The conversion module makes sure that your data are properly
formatted, converting umlauts to their proper HTML entities or their
URI encoded equivalent, for example. Like every Websh module, this
module manages its data on its own. In order to ensure thread safety,
no Websh module maintains global or static variables. Such
variables would be shared across multiple Tcl interpreters and cause
conflicts. Each time an interpreter loads Websh and thus this
module, the module-specific data like the look-up tables for the
conversions will be set up, and destroyed again when the interpreter
is deleted. The disadvantage of this design, the duplication of data
in the memory of one process, is compensated by the long-term
stability of the process resulting from clean memory management.
<a name=""><a href="#toc"><h3>3.4.5 security by encryption</h3></a>
The proper handling of sensitive data is crucial for banking or
E-commerce applications. Three aspects are important: Data
transfer, data storage, and session hijacking. The first of
these aspects, data transfer, is not Websh's task. Websh
assumes that data transfer is secured whenever needed, for
example by means of SSL, and Websh deliberately chooses not
to provide any additional functionality here.
Handling of sensitive data, on the other hand, is the task of Websh
and the Websh application. This is why Websh comes with a
strong encryption sub-system to store data securely. By default,
Websh encrypts the state information in every URL it generates.
The level of security is chosen by the application developer. She
selects both the encryption method and the encryption key. For highly
sensitive data, the application developer might not even know the
pass-phrase to decrypt data from the productive environment.
Websh relies on well-known and well-tested encryption methods,
which are made available to Websh by means of plug-ins. Currently,
there are plug-Ins available for the IDEA and the blowfish encryption
methods, as well as for a simple encryption method for day-to-day use.
Webshs encryption module protects data with a checksum to prevent
cipher tampering. For decryption, Webshs encryption sub-system
uses a auto-detection system to determine the encryption method.
Note that Websh provides the framework to handle sensitive
data properly. The level of security, however, is determined by
the developer of a Websh application.
<a name=""><a href="#toc"><h3>3.4.6 messages on streams</h3></a>
This Websh module implements a simple protocol to facilitate
message-based communication over Tcl channels. Particularly, it is
used for communication over TCP/IP connections.
<a name=""><a href="#toc"><h3>3.4.7 logging facility</h3></a>
Like all service applications, web applications need a versatile
logging mechanism to report errors and state. In fact, Websh
itself makes heavy use of the logging facility. Logging must be easy
to use, fast, and extensible. Typically, Websh applications handle
hundreds of requests per second, and the logging facility has been
designed with this kind of load in mind.
The Websh logging module manages a list of filters and a list of
destinations. Each log message comes with a &amp;quot;address&amp;quot; consisting
of a tag and a level, which is compared against two filters before the
message is delivered to its destination. First, an overall filter
determines whether or not Websh needs to process the message. Then, a second,
per-destination filter determines whether or not the message has to be sent
to the log destination.
The Websh logging module is fully extensible through plug-Ins.
Out-of-the-box, Websh comes with plug-Ins to log to files, syslog,
Tcl channels, and Tcl
commands. The latter gives the application developer a simple mechanism to
extend the logging module by writing Tcl commands.
<a name="400"><a href="#toc"><h1>4 Hello, world!</h1></a>
The following example demonstrates a very simple Websh script which
produces the simple message <i>Hello, world</i>
web::command default {
web::put &quot;Hello, world!\n&quot;
This script can be used as is as a CGI application. Websh
takes care of MIME-headers and other details of the HTTP
<a name="416"><a href="#toc"><h1>5 Flow of control</h1></a>
The flow of control of a Websh application is as follows:
<li>Declaration and definition stage: Websh reads and evaluates</li>
the script. The command procedures defined
by web::command and all helper procedures are not executed
immediately, however (see below).
<li>Configuration stage: Additional configuration information is</li>
read. This happens after declaration, in order to allow specific
applications to override configuration settings and also to allow
logging parameters to be set in the declaration stage. This
allows problems in the configuration (e.g., incorrect configuration
information, configuration files cannot be accessed etc.) to be
logged accordingly.
<li>Initialization stage: Internal data structures are initialized,</li>
depending on the type of call (e.g., as CGI-application, as
stand-alone script). If the call was as a result of an HTTP-POST
message, any HTML form data is collected. At the
end of the initialization stage, all information provided by the
client is available to the application.
<li>Command dispatch: Based on the command selector, the appropriate</li>
web::command is executed. If there is no command selector
supplied, the default command is called.
<li>Termination stage: Application data is cleaned-up, all streams are</li>
flushed and control is returned to the caller.
The command-dispatch stage makes it possible for one script to deal with
many actions and states of an application. For example, one script can
generate many different pages within an application. That way,
Websh programmers can keep the focus on the application as a whole,
rather than writing one script per page. This is especially important for the
somewhat special transaction characteristics of Web-applications.
In forms-based applications, a transaction, from the application's
point of view, is cut into two half-transactions. The first half
renders an HTML page with the corresponding form, while the second
part handles the data transmitted to the application. Both parts are
only glued together by the state management of Websh. However, it
is never known in advance when in time the second half of the
transaction will be executed (someone can open a form for edit and
then &quot;forget&quot; to submit it). The strong separation of these long
transactions into two halves is characteristic for Web-based
applications and differs from from traditional GUI applications where
both half steps, the display of a dialog and the collection of the
input, are usually executed in strong association (e.g., within the
same method of the application).
<a name="467"><a href="#toc"><h1>6 Commands</h1></a>
This section lists the main commands of Websh. For a complete
overview, you may want to look at the
<a href="quickref.html">Quick Reference</a>.
<a name="474"><a href="#toc"><h2>6.1 request and url management</h2></a>
<a name="484"><a href="#toc"><h2>6.2 session management</h2></a>
<a name="490"><a href="#toc"><h2>6.3 output management</h2></a>
<a name="497"><a href="#toc"><h2>6.4 conversion</h2></a>
<a name="506"><a href="#toc"><h2>6.5 messages</h2></a>
<a name="512"><a href="#toc"><h2>6.6 encryption</h2></a>
<a name="517"><a href="#toc"><h2>6.7 logging</h2></a>
<a name="523"><a href="#toc"><h2>6.8 misc</h2></a>
<a name="533"><a href="#toc"><h1>7 Security issues</h1></a>
Web-applications are subject to security issues as are all networked
applications. Furthermore, these applications are often deployed in the
Internet, making the security issues even more important. In the context
of Websh there are four different topics with the overall security
issues discussed here:
<li>Can Websh applications be used to gain unauthorized</li>
access to a computer ?
<li>What levels of stability do these applications show, i.e., do Websh</li>
applications often fail ?
<li>How does Websh manage user authentication and user</li>
authorization ?
<li>How is sensitive data handeled ?</li>
Websh does not offer any direct solution to these problems. Rather,
Websh is designed to avoid problems (intrusion, stability) and
allow simple inclusion of various authentication and data encryption
The problem of gaining unauthorized access is too important to be
solved by the tool used for application development. Therefore, the
design of Websh assumes that the surrounding system architecture,
i.e., Web server and Firewall handle these issues. This means, that
the Web server is responsible to execute CGI applications with
suitable low privileges, in Unix environments typically by setting the
effective UID to an unprivileged user and executing the
CGI-application in a chroot-environment.
However, a Websh-developer can introduce security holes. The
flexibility of Websh clearly allows dangerous things to be
programmed. Therefore, security issues have to be checked with every
The stability issue has rather different characteristics than the
intrusion problems, but it is nontheless very important. Unstable
applications typically &quot;get touched&quot; very often, leading to generally
less secure systems. Also, crashing applications can impair a system's
stability if the applications take unexpected execution paths. The
design of Websh is lead by the idea to provide a simple, flexible
and easy-to-understand framework. Compared to other products, Websh
deliberately prefers transparency over high integration and
automation. This simplicity and flexibility, somehow similar to the
Unix model, leads to a high stability of the overall system. At the
time of this writing, Websh has been in production for almost four
years, without any major stability problems so far.
User authentication is a third security domain important in many
Web-based applications. The design of Websh deliberately does not
include any specific method for user authentication. The reason for
this decision is that the specific authentication method needed
largely depends on the context of the application. Some applications
might authenticate users using a host system, others need specific
one-time-password schemes, and some applications might even rely on
authentication schemes provided by Web-servers and -browsers. The
extensibility of Websh allows various authentication schemes to be
Finally, the importance of the secure handling of sensitive data is
becoming more and more recognized. Here, Websh provides a extensible
encryption module which allows one to easily encrypt data before
storing, and to decrypt the data after reading. For example, a simple
encryption is used by default for the querystring generation, which
might contain sensible information. The encryption module uses
checksums to ensure the full transmission of encrypted text and
timestamps in order to ensure unique data.
The encryption sub-system of Websh is easily extensible by
plug-Ins which can be loaded when needed.
<a name="609"><a href="#toc"><h1>8 Requirements</h1></a>
Tcl 8.2.2 or higher
For use as a web application, a web server supporting CGI is
needed. The Websh module for Apache 2 requires Apache 2.
<a name=" "><a href="#toc"><h1>9 Copyright</h1></a>
Copyright (C) 2000 by Netcetera.<br>
Copyright (C) 2001, 2002 by The Apache Software Foundation.<br>
All rights reserved.<br>
You may always find an up-to-date version of the Websh white paper
at <a href=""></a>.
<table border="0" cellpadding="0" cellspacing="0" width="770" height="45">
<tr valign="top">
<td colspan="2">
<hr noshade size="1">
<tr valign="top">
<td width="10"></td>
<td width="760">
<a href="product.html">description</a>&nbsp;|&nbsp;<span class="blue">documentation</span>&nbsp;|&nbsp;<a href="support.html">support</a>&nbsp;|&nbsp;<a href="resources.html">resources</a>&nbsp;|&nbsp;<a href="download.html">download</a>&nbsp;|&nbsp;<a href="credits.html">credits</a>&nbsp;|&nbsp;<a href="copyright.html">copyright</a>
<tr valign="top">
<td colspan="2">
<hr noshade size="1">
<tr valign="top">
<td width="10"></td>
<td width="760">
<span class="klein"><b>&copy; Websh - an <a href="">Apache Tcl</a> project - part of the <a href="">Apache Software Foundation</a></b></span></td>