c# convert pdf to image open source : How to save a filled out pdf form in reader SDK application API .net html winforms sharepoint Flask25-part357

CHAPTER
TWENTYTHREE
HTML/XHTML FAQ
The Flask documentation and example applications are using HTML5. You may no-
tice that in many situations, when end tags are optional they are not used, so that
the HTML is cleaner and faster to load. Because there is much confusion about HTML
and XHTML among developers, this documenttries to answersome ofthe majorques-
tions.
23.1 History of XHTML
For a while, it appeared that HTML was about to be replaced by XHTML. However,
barely any websites on the Internet are actual XHTML (which is HTML processed us-
ing XML rules). There are a couple of major reasons why this is the case. One of
them is Internet Explorer’s lack of proper XHTML support. The XHTML spec states
that XHTML must be served with the MIME type application/xhtml+xml, but Internet
Explorer refuses to read files with that MIME type. While it is relatively easy to con-
figure Web servers to serve XHTML properly, few people do. This is likely because
properly using XHTML can be quite painful.
One of the most important causes of pain is XML’s draconian (strict and ruthless) er-
ror handling. When an XML parsing error is encountered, the browser is supposed to
show the user an ugly error message, instead of attempting to recover from the error
and display what it can. Most of the (X)HTML generation on the web is based on
non-XML template engines (such as Jinja, the one used in Flask) which do not protect
you from accidentally creating invalid XHTML. There are XML based template en-
gines, such as Kid and the popular Genshi, but they often come with a larger runtime
overhead and, are not as straightforward to use because they have to obey XML rules.
The majority of users, however, assumed they were properly using XHTML. They
wrote an XHTML doctype at the top of the document and self-closed all the necessary
tags (<br> becomes <br/> or <br></br> in XHTML). However, even if the document
properly validates as XHTML, what really determines XHTML/HTML processing in
browsers is the MIME type, which as said before is often not set properly. So the valid
XHTML was being treated as invalid HTML.
XHTML also changed the way JavaScriptis used. To properly work withXHTML, pro-
grammers have to use the namespaced DOM interface with the XHTML namespace
241
How to save a filled out pdf form in reader - extract form data from PDF in C#.net, ASP.NET, MVC, Ajax, WPF
Help to Read and Extract Field Data from PDF with a Convenient C# Solution
how to save pdf form data in reader; change font size pdf form reader
How to save a filled out pdf form in reader - VB.NET PDF Form Data Read library: extract form data from PDF in vb.net, ASP.NET, MVC, Ajax, WPF
Convenient VB.NET Solution to Read and Extract Field Data from PDF
pdf data extractor; export excel to pdf form
to query for HTML elements.
23.2 History of HTML5
Development of the HTML5 specification was started in 2004 under the name “Web
Applications 1.0” by the Web Hypertext Application Technology Working Group, or
WHATWG (which was formed by the major browser vendors Apple, Mozilla, and
Opera) with the goal of writing a new and improved HTML specification, based on
existing browser behavior instead of unrealistic and backwards-incompatible specifi-
cations.
For example, in HTML4 <title/Hello/ theoretically parses exactly the same as
<title>Hello</title>. However, since people were using XHTML-like tags along the
lines of <link />, browser vendors implemented the XHTML syntax over the syntax
defined by the specification.
In 2007, the specification was adopted as the basis of a new HTML specification under
the umbrella of the W3C, known as HTML5. Currently, it appears that XHTML is
losing traction, as the XHTML 2 working group has been disbanded and HTML5 is
being implemented by all major browser vendors.
23.3 HTML versus XHTML
The following table gives you a quick overview of features available in HTML 4.01,
XHTML 1.1 and HTML5. (XHTML 1.0 is not included, as it was superseded by
XHTML 1.1 and the barely-used XHTML5.)
242
VB.NET Image: How to Draw and Cutomize Text Annotation on Image
can adopt these APIs to work out more advanced Fill.Solid_Color = Color.Gray 'set filled shapes color As Bitmap = obj.CreateAnnotation() img.Save(folderName &
extract data from pdf file to excel; fill in pdf form reader
VB.NET TIFF: Make Custom Annotations on TIFF Image File in VB.NET
This online guide content is Out Dated! with image, as well as delete and save annotation made set annotation edge color 'set the property of filled shape obj
how to make pdf editable form reader; pdf form save in reader
HTML4.01
XHTML1.1
HTML5
<tag/value/ == <tag>value</tag>
1
<br/> supported
2
<script/> supported
should be served as text/html
3
should be served as application/xhtml+xml
strict error handling
inline SVG
inline MathML
<video> tag
<audio> tag
New semantic tags like <article>
23.4 What does “strict” mean?
HTML5 has strictly defined parsing rules, but it also specifies exactly how a browser
should react to parsing errors - unlike XHTML, which simply states parsing should
abort. Some people are confused by apparently invalid syntax that still generates the
expected results (for example, missing end tags or unquoted attribute values).
Some of these work because of the lenient error handling most browsers use when
they encounter a markup error, others are actually specified. The following constructs
are optional in HTML5 by standard, but have to be supported by browsers:
• Wrapping the document in an <html> tag
• Wrapping header elements in <head> or the body elements in <body>
• Closing the <p>, <li>, <dt>, <dd>, <tr>, <td>, <th>, <tbody>, <thead>, or <tfoot>
tags.
• Quoting attributes, so long as they contain no whitespace or special characters
(like <, >, ’, or ").
• Requiring boolean attributes to have a value.
This means the following page in HTML5 is perfectly valid:
<!doctype html>
<title>Hello HTML5</title>
1
Thisisanobscurefeature inheritedfromSGML.Itis usuallynotsupportedbybrowsers,forreasons
detailedabove.
2
This is for compatibility with server code that generates XHTML for tags such as <br>. It should
not be usedin new code.
3
XHTML 1.0 is the last XHTML standard that allows to be served as text/html for backwards com-
patibility reasons.
243
VB.NET PDF: Use VB Code to Draw Text and Graphics on PDF Pages for
This online guide content is Out Dated! obj.FontBrush.Solid_Color = Color.Blue 'set filled font color As Bitmap = obj.PDFTextDrawing() img.Save(folderName__1 &
extract table data from pdf; how to save a pdf form in reader
C#: XDoc.HTML5 Viewer for .NET Online Help Manual
4. FilledRectangle. Click to draw a filled rectangle annotation. Click to save created redaction with customized name. 6. zoomIn. Click to zoom out current file.
sign pdf form reader; how to make a pdf form fillable in reader
<div class=header>
<h1>Hello HTML5</h1>
<class=tagline>HTML5 is awesome
</div>
<ul class=nav>
<li><href=/index>Index</a>
<li><href=/downloads>Downloads</a>
<li><href=/about>About</a>
</ul>
<div class=body>
<h2>HTML5 is probably the future</h2>
<p>
There might be some other things around but in terms of
browser vendor support, HTML5 is hard to beat.
<dl>
<dt>Key 1
<dd>Value 1
<dt>Key 2
<dd>Value 2
</dl>
</div>
23.5 New technologies in HTML5
HTML5 adds many new features that make Web applications easier to write and to
use.
• The <audio> and <video> tags provide a way to embed audio and video without
complicated add-ons like QuickTime or Flash.
• Semantic elements like <article>, <header>, <nav>, and <time> that make con-
tent easier to understand.
• The <canvas> tag, which supports a powerful drawing API, reducing the need
for server-generated images to present data graphically.
• Newformcontrol types like <input type="date"> thatallow useragents to make
entering and validating values easier.
• Advanced JavaScript APIs like Web Storage, Web Workers, Web Sockets, geolo-
cation, and offline applications.
Many other features have been added, as well. A good guide to new features in
HTML5 is Mark Pilgrim’s soon-to-be-published book,DiveIntoHTML5. Not all of
them are supported in browsers yet, however, so use caution.
244
C# Image: C#.NET Code to Add Rectangle Annotation to Images &
Add-on successfully stands itself out from other C# Color.Gray;//set filled shape color img = obj.CreateAnnotation(); img.Save(folderName + "RectangleAnnotation
extracting data from pdf into excel; extract data from pdf
23.6 What should be used?
Currently, the answer is HTML5. There are very few reasons to use XHTML consider-
ing the latest developments in Web browsers. To summarize the reasons given above:
• Internet Explorer (which, sadly, currently leads in market share) has poor sup-
port for XHTML.
• Many JavaScript libraries also do not support XHTML, due to the more compli-
cated namespacing API it requires.
• HTML5 adds several newfeatures, including semantictags and thelong-awaited
<audio> and <video> tags.
• It has the support of most browser vendors behind it.
• It is much easier to write, and more compact.
For most applications, it is undoubtedly better to use HTML5 than XHTML.
245
246
CHAPTER
TWENTYFOUR
SECURITY CONSIDERATIONS
Web applications usually face all kinds of security problems and it’s very hard to get
everything right. Flask tries to solve a few of these things for you, but there are a
couple more you have to take care of yourself.
24.1 Cross-Site Scripting (XSS)
Cross site scripting is the concept of injecting arbitrary HTML (and with it JavaScript)
into the context of a website. To remedy this, developers have to properly escape text
so that it cannot include arbitrary HTML tags. For more information on that have a
look at the Wikipedia article onCross-SiteScripting.
Flask configures Jinja2 to automatically escape all values unless explicitly told other-
wise. This should rule out all XSS problems caused in templates, but there are still
other places where you have to be careful:
• generating HTML without the help of Jinja2
• calling Markup on data submitted by users
• sending out HTML from uploaded files, never do that, use the Content-
Disposition: attachment header to prevent that problem.
• sending out textfiles from uploaded files. Some browsers are using content-type
guessing based on the first few bytes so users could trick a browser to execute
HTML.
Another thing that is very important are unquoted attributes. While Jinja2 can protect
you from XSS issues by escaping HTML, there is one thing it cannot protect you from:
XSS by attribute injection. To counter this possible attack vector, be sure to always
quote your attributes with either double orsingle quotes whenusing Jinja expressions
in them:
<href="{{ href }}">the text</a>
Why is this necessary? Becauseif you would notbe doing that, an attackercould easily
inject custom JavaScript handlers. For example an attacker could inject this piece of
HTML+JavaScript:
247
onmouseover=alert(document.cookie)
When the user would then move with the mouse over the link, the cookie would be
presented to the user in an alert window. But instead of showing the cookie to the
user, a good attacker might also execute any other JavaScript code. In combination
with CSS injections the attacker might even make the element fill out the entire page
so that the user would just have to have the mouse anywhere on the page to trigger
the attack.
24.2 Cross-Site Request Forgery (CSRF)
Another big problem is CSRF. This is a very complex topic and I won’t outline it here
in detail just mention what it is and how to theoretically prevent it.
If your authentication information is stored in cookies, you have implicit state man-
agement. The state of “being logged in” is controlled by a cookie, and that cookie is
sent with each request to a page. Unfortunately that includes requests triggered by
3rd party sites. If you don’t keep thatin mind, some people might be able to trick your
application’s users with social engineering to do stupid things withoutthem knowing.
Say you have a specific URL that, when you sent POST requests to will delete a user’s
profile (say http://example.com/user/delete). If an attacker now creates a page that sends
apost request to that page with some JavaScript they just has to trick some users to
load that page and their profiles will end up being deleted.
Imagine you were to run Facebook with millions of concurrent users and someone
would send out links to images of little kittens. When users would go to that page,
their profiles would get deleted while they are looking at images of fluffy cats.
How can you prevent that? Basically for each request that modifies content on the
server you would have to either use a one-time token and store that in the cookie and
also transmit it with the form data. After receiving the data on the server again, you
would then have to compare the two tokens and ensure they are equal.
Why does Flask not do that for you? The ideal place for this to happen is the form
validation framework, which does not exist in Flask.
24.3 JSON Security
ECMAScript 5 Changes
Starting with ECMAScript 5 the behavior of literals changed. Now they are not con-
structed with the constructor of Array and others, but with the builtin constructor of
Array which closes this particular attack vector.
248
JSON itself is a high-level serialization format, so there is barely anything that could
cause security problems, right? You can’tdeclare recursive structures that could cause
problems and the only thing that could possibly break are very large responses that
can cause some kind of denial of service at the receiver’s side.
However there is a catch. Due to how browsers work the CSRF issue comes up with
JSON unfortunately. Fortunately there is also a weird part of the JavaScript specifica-
tionthat can be used to solve that problem easily and Flask is kinda doing that for you
by preventing you from doing dangerous stuff. Unfortunately that protection is only
there for jsonify() so you are still at risk when using other ways to generate JSON.
So what is the issue and how to avoid it? The problem are arrays at top-level in JSON.
Imagine you send the following data out in a JSON request. Say that’s exporting the
names and email addresses of all your friends for a part of the user interface that is
written in JavaScript. Not very uncommon:
[
{"username""admin",
"email": "admin@localhost"}
]
And it is doing that of course only as long as you are logged in and only for you. And
it is doing that for all GET requests to a certain URL, say the URL for that request is
http://example.com/api/get_friends.json.
So now what happens if a clever hacker is embedding this to his website and social
engineers a victim to visiting his site:
<script type=text/javascript>
var captured [];
var oldArray = Array;
function Array() {
var obj = this, id 0, capture = function(value) {
obj.__defineSetter__(id++, capture);
if (value)
captured.push(value);
};
capture();
}
</script>
<script type=text/javascript
src=http://example.com/api/get_friends.json></script>
<script type=text/javascript>
Array oldArray;
// now we have all the data in the captured array.
</script>
If you know a bit of JavaScript internals you might know that it’s possible to patch
constructors and register callbacks for setters. An attacker can use this (like above)
to get all the data you exported in your JSON file. The browser will totally ignore
the application/json mimetype if text/javascript is defined as content type in the
script tag and evaluate thatas JavaScript. Because top-level arrayelementsare allowed
249
(albeit useless) and we hooked in our own constructor, after that page loaded the data
from the JSON response is in the captured array.
Because it is a syntax error in JavaScript to have an object literal ({...}) toplevel an
attacker could not just do a request to an external URL with the script tag to load up
the data. So what Flask does is to only allow objects as toplevel elements when using
jsonify(). Make sure to do the same when using an ordinary JSON generate function.
250
Documents you may be interested
Documents you may be interested