{"id":371,"date":"2019-10-21T13:35:52","date_gmt":"2019-10-21T13:35:52","guid":{"rendered":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?p=371"},"modified":"2020-06-17T06:47:16","modified_gmt":"2020-06-17T06:47:16","slug":"lets-talk-about-security-validate-all-input","status":"publish","type":"post","link":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/","title":{"rendered":"Let&#8217;s Talk About Security \u2013 Validate All Input"},"content":{"rendered":"\n<p>In my <a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/lets-talk-about-security-digital-identity\/\">last post<\/a>, Sebastian Safe built a login screen for his locksmith website. In this context, I addressed known security vulnerabilities and possible precautions that can be taken. Only users who are given the respective rights upon registration on the website should be granted access to the system.&nbsp;<\/p>\n\n\n\n<p>Now, Sebastian is going to make sure that the users can use the required features of the website. The website can upload images, files or texts to the server. The uploaded files are then processed by the system and stored on corresponding server paths. Since he believes that only \u201cselected\u201d users have access to the system, Sebastian fails to take security precautions after the login. However, one has to assume that these users unknowingly have malware that they unintentionally upload to the system. Therefore, every user has to be treated as a potential hazard. Consequently, the data traffic on Sebastian\u2019s website has to be verified and validated. This is where \u201cValidate all input\u201d comes in.<\/p>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img decoding=\"async\" src=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201910_Security_Validate_All_Input_1-600x430.jpg\" alt=\"close-up view of a laptop, some networked icons in front\" class=\"wp-image-485\"\/><figcaption><em>Figure 1: Validate all input; <a href=\"https:\/\/www.freepik.es\/fotos-vectores-gratis\/fondo\">Foto de Fondo creado por creativeart &#8211; www.freepik.es<\/a><\/em><\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The objective of validation is to verify that the data entering the system do not cause any damage or cause information to be leaked. The data from the external system should be validated as quickly as possible to ensure that they can manipulate Sebastian\u2019s website as little as possible. Even if the external systems are trusted systems, the incoming information has to be validated. This also includes partners whose data is required for processing. There is no such thing as 100% certainty that partner systems have not been compromised. The data should first be validated on the semantic and syntactical level. The file should have the logical structure of the respective file format, and the content should correspond to the required input. The following points should be observed in the validation.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. Black- and whitelisting<\/strong><\/h2>\n\n\n\n<p>This is the simplest method that Sebastian can implement. For uploading an image, it is important to verify that it is really possible to only upload image formats. It should not be possible to use an image upload field to upload scripts to the system that could subsequently attack it from within. However, it might be possible to upload files that have the outwardly correct format, but contain &lt;SCRIPT&gt; tags. Such files can execute scripts even when the file format has been verified. This method is called cross-site scripting (XSS), which is a type of injection that gives an attacker access to the system. Therefore, it is important to do not only a visual check, but to verify the content of the respective file as well.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Limits (min &amp; max)<\/strong><\/h2>\n\n\n\n<p>The value range for the entries and files should also be defined. This does not necessarily refer to uploading a file. It is also possible to send strings that are subsequently stored in the database. Consequently, if a date or number is entered, it is important to check, for example, that it has the correct length. When uploading files, it is advisable to check that the size of the imported file is not in the gigabyte range if it is a simple profile picture. All these considerations regarding minimum and maximum limits are common test scenarios that any professional QA team will observe. A special example of such a size limitation is the \u201cbillion laughs attack\u201d. This is an XML file that defines an entity in the header. It consists of several LOL strings that multiply by ten due to the nested invocation.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    &lt;!--?xml version=\"1.0\"?-->\n     &lt;!--ELEMENT lolz (#PCDATA)-->\n     &lt;!--ENTITY lol1 \"&amp;lol;&amp;lol;&amp;lol;&amp;lol;&amp;lol;&amp;lol;&amp;lol;&amp;lol;&amp;lol;&amp;lol;\"-->\n     &lt;!--ENTITY lol2 \"&amp;lol1;&amp;lol1;&amp;lol1;&amp;lol1;&amp;lol1;&amp;lol1;&amp;lol1;&amp;lol1;&amp;lol1;&amp;lol1;\"-->\n     &lt;!--ENTITY lol3 \"&amp;lol2;&amp;lol2;&amp;lol2;&amp;lol2;&amp;lol2;&amp;lol2;&amp;lol2;&amp;lol2;&amp;lol2;&amp;lol2;\"-->\n     &lt;!--ENTITY lol4 \"&amp;lol3;&amp;lol3;&amp;lol3;&amp;lol3;&amp;lol3;&amp;lol3;&amp;lol3;&amp;lol3;&amp;lol3;&amp;lol3;\"-->\n     &lt;!--ENTITY lol5 \"&amp;lol4;&amp;lol4;&amp;lol4;&amp;lol4;&amp;lol4;&amp;lol4;&amp;lol4;&amp;lol4;&amp;lol4;&amp;lol4;\"-->\n     &lt;!--ENTITY lol6 \"&amp;#038;lol5;&amp;#038;lol5;&amp;#038;lol5;&amp;#038;lol5;&amp;#038;lol5;&amp;#038;lol5;&amp;#038;lol5;&amp;#038;lol5;&amp;#038;lol5;&amp;#038;lol5;\"-->\n     &lt;!--ENTITY lol7 \"&amp;#038;lol6;&amp;#038;lol6;&amp;#038;lol6;&amp;#038;lol6;&amp;#038;lol6;&amp;#038;lol6;&amp;#038;lol6;&amp;#038;lol6;&amp;#038;lol6;&amp;#038;lol6;\"-->\n     &lt;!--ENTITY lol8 \"&amp;#038;lol7;&amp;#038;lol7;&amp;#038;lol7;&amp;#038;lol7;&amp;#038;lol7;&amp;#038;lol7;&amp;#038;lol7;&amp;#038;lol7;&amp;#038;lol7;&amp;#038;lol7;\"-->\n     &lt;!--ENTITY lol9 \"&amp;#038;lol8;&amp;#038;lol8;&amp;#038;lol8;&amp;#038;lol8;&amp;#038;lol8;&amp;#038;lol8;&amp;#038;lol8;&amp;#038;lol8;&amp;#038;lol8;&amp;#038;lol8;\"-->\n    ]>\n    &lt;lolz>&amp;lol9;&lt;\/lolz><\/code><\/pre>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>In this example, the LOL string is uploaded to the system memory 1,000,000,000 times. Depending on the strength of the system\u2019s hardware, reading this file can result in a complete collapse. The quantity and size of the string can even be increased, and several files of this kind could be uploaded simultaneously. In such a situation, it is therefore necessary for the system to terminate the process when a certain size is exceeded in order to protect itself. This is not a security vulnerability that leaks information, but it can be exploited to crash the system. And such a crash can then be used to take other steps to infiltrate our system.<\/p>\n\n\n\n<p>For the testers among you, the billion laughs attack might be an interesting opportunity to test your test systems.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Client and server verification<\/strong><\/h2>\n\n\n\n<p>It is important to make sure that the input is validated not only on the client, but on the server as well. In web applications, it is possible to bypass the javascripts by means of a proxy or direct queries to the server. Therefore, a double-sided safeguard is recommended. If the client verifies that the file has to be a JPG, and the file is uploaded only after this verification, verification on the server side could be neglected. However, if the attacker reads out the exact addresses and the structure of this upload query to the server by means of network monitoring tools, they will be able to create their own upload query by means of REST tools and bypass the client-side verification. This way, an attacker would be able to deposit scripts directly on the server, which they can then use to gain access to the server or read out information. Therefore, files have to be verified before and after the upload.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. Server-side control<\/strong><\/h2>\n\n\n\n<p>Another point to be considered is the determination of the location. It should be determined by the server, not the client. Depending on how much information an attacker has been able to read from the client\u2019s scripts, such information can give them an overview of the server structure, giving them a larger target for the attack. Furthermore, the server should also rename a file upon storing it in the defined storage path. This ensures that any script content in the file that was overlooked and that would access the file\u2019s own name cannot be executed because the file would not exist in this case.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>    servertestuploadsTestupload.JPG<\/code><\/pre>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>&#8212;<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>    servertestuploadsTE123ST321UPZEZELOAUIUID.JPG<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>These points can easily be verified by QA by checking the server directories after a test upload and analyzing the upload files located there.<\/p>\n\n\n\n<p>In addition, there is software that scans the servers for malware and examines the uploaded files directly. For testing purposes, malware can be uploaded to the server to identify any such security vulnerabilities. However, such tests should always be agreed in advance with the person responsible for the system.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5. Regular expressions<\/strong><\/h2>\n\n\n\n<p>Creating regular expressions for a specific task is a great tool to eliminate security vulnerabilities. The only characters allowed for the required input are those the system can process. It is not necessary to allow for the entire UTF-16 if only numbers are needed for a post code. This way, you can limit the potential risks for each input field. Again, they should be verified both on the client and the server side. Another important security guideline for regular expressions is NOT to use wildcards.<\/p>\n\n\n\n<p>Simple expression for an email address:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>    &#91;a-zA-Z]@&#91;a-zA-Z].&#91;a-zA-Z]<\/code><\/pre>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Here, a simple regular expression is used for email addresses, although it can be elaborated to a much greater degree.<\/p>\n\n\n\n<p>Elaborate expression for an email address:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>    ^&#91;w-.{}#+&amp;-]{1,}@(&#91;da-zA-Z-{}#]{1,}.){1,}&#91;da-zA-Z-]{2,3}$<\/code><\/pre>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>As email addresses offer a very wide range to choose from, writing a restricting regular expression for them is difficult due to the large number of special characters alone. The good news is, there are numerous frameworks that already have such features and that will help you with the verification in this context.<\/p>\n\n\n\n<p>These are just a few of the issues that ought to be observed to eliminate security vulnerabilities. What is also worth mentioning is that using known frameworks is usually better than devising your own features. On the one hand, these frameworks have been tried and tested and have evolved over time, and on the other hand, they are updated whenever new vulnerabilities are identified.<\/p>\n\n\n\n<p>Known frameworks for input validation:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Django Validators<\/li><li>FluentValidation<\/li><li>Apache Commons Validators<\/li><li>Express Validator<\/li><\/ul>\n\n\n\n<p>The \u201cFluentValidation\u201d framework makes validating regular expressions, strings, etc. much easier for the developer. The framework is structured in such a way that you can use simple and clear verification features for the variables of a specific class that the user enters on the website interface. Sebastian created a small class for his locksmith customers, which he calls \u201cSchluesseldienst\u201d. The registered users enter the required information for this class via a registration form. This information includes the company name, address, email address and credit card number and is used to create the class. But before the class is used to store the information in the database, where the unverified data could cause damage, they are verified by the framework.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class Locksmith \n{ \n    public int Id { get; set; }\n    public string firmname { get; set; } \n    public string address { get; set; }\n    public string email { get; set; }\n    public string creditcard { get; set; } \n} \n\n\n\nusing FluentValidation; \n\npublic class CustomerService : AbstractValidator&lt;Locksmith> \n{ public CustomerService() \n{   RuleFor(Locksmith => Locksmith.firmname).NotEmpty() \/\/no spaces\n                                             .Length(1,100); \/\/  stringlength between 1 and 100 \n    Rulefor(Locksmith => Locksmith.adress)   .NotEmpty() \n                                            .Length(I,_ ); \n    Rulefor(Locksmith => Locksmith.email) .NotEmpty() \n                                          .Length(_,_n) \n                                          .EmailAddress();\/\/ verify emailadress format \n    Rulefor(Locksmith => Locksmith.creditcard).NotEmpty() \n                                              .Length(_,_ ) \n                                              .CreditCard(); \/\/ verify creditcard\n\n\n\n\nLocksmith customer = new Locksmith(); CustomerService examiner = new CustomerService(); \nValidationResult results = examiner.Validate(customer); \nif(! results.IsValid) { foreach(var failure in results.Errors) { Console.WriteLine(\"attribut\" + failure.PropertyName + \" failed. Error: \" + failure.ErrorMessage); } } <\/code><\/pre>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>If the validation produces any errors, they are displayed and documented. This way, the correct content of the information is ensured before the data are stored.<\/p>\n\n\n\n<p>This concludes the second part of my security talk. I hope this blog post gave you an overview of the validation of input in your systems.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The objective of validation is to verify that the data entering the system do not cause any damage or cause information to be leaked.<\/p>\n","protected":false},"author":76,"featured_media":374,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","footnotes":""},"categories":[7,8],"tags":[141,142,143,144,146,147,98,134,135,136,137,138,140],"topics":[81],"class_list":["post-371","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-quality-assurance","category-web","tag-fluentvalidation","tag-apache-commons-validators","tag-express-validator","tag-verifikation","tag-black-listing","tag-white-listing","tag-security","tag-regular-expression","tag-billion-laughs-attack","tag-malware","tag-django-validators","tag-validation","tag-input-validation","topics-security"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Let&#039;s Talk About Security \u2013 Validate All Input - ZEISS Digital Innovation Blog<\/title>\n<meta name=\"description\" content=\"The objective of validation is to verify that the data entering the system do not cause any damage or cause information to be leaked.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Let&#039;s Talk About Security \u2013 Validate All Input - ZEISS Digital Innovation Blog\" \/>\n<meta property=\"og:description\" content=\"The objective of validation is to verify that the data entering the system do not cause any damage or cause information to be leaked.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/\" \/>\n<meta property=\"og:site_name\" content=\"Digital Innovation Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-21T13:35:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-06-17T06:47:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201910_Security_Validate_All_Input_1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1433\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Neco Giedrojc\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Neco Giedrojc\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/\",\"name\":\"Let's Talk About Security \u2013 Validate All Input - ZEISS Digital Innovation Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201910_Security_Validate_All_Input_1.jpg\",\"datePublished\":\"2019-10-21T13:35:52+00:00\",\"dateModified\":\"2020-06-17T06:47:16+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/52922d077aabdd8130bc2df264e0cf5b\"},\"description\":\"The objective of validation is to verify that the data entering the system do not cause any damage or cause information to be leaked.\",\"breadcrumb\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/#primaryimage\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201910_Security_Validate_All_Input_1.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201910_Security_Validate_All_Input_1.jpg\",\"width\":2000,\"height\":1433,\"caption\":\"Nahaufnahme Laptop, davor miteinander vernetzte Icons\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Let&#8217;s Talk About Security \u2013 Validate All Input\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/\",\"name\":\"Digital Innovation Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/52922d077aabdd8130bc2df264e0cf5b\",\"name\":\"Neco Giedrojc\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/05\/giedrojc_neco-150x150.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/05\/giedrojc_neco-150x150.jpg\",\"caption\":\"Neco Giedrojc\"},\"description\":\"Shortly after completing his degree in \\\"Computer Engineering\\\", Neco Giedrojc joined the test area of ZEISS Digital Innovation and works there as a tester. In his main project, he is currently dealing with the integration test of complex systems.\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/ennecogiedrojc\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Let's Talk About Security \u2013 Validate All Input - ZEISS Digital Innovation Blog","description":"The objective of validation is to verify that the data entering the system do not cause any damage or cause information to be leaked.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/","og_locale":"en_US","og_type":"article","og_title":"Let's Talk About Security \u2013 Validate All Input - ZEISS Digital Innovation Blog","og_description":"The objective of validation is to verify that the data entering the system do not cause any damage or cause information to be leaked.","og_url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/","og_site_name":"Digital Innovation Blog","article_published_time":"2019-10-21T13:35:52+00:00","article_modified_time":"2020-06-17T06:47:16+00:00","og_image":[{"width":2000,"height":1433,"url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201910_Security_Validate_All_Input_1.jpg","type":"image\/jpeg"}],"author":"Neco Giedrojc","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Neco Giedrojc","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/","name":"Let's Talk About Security \u2013 Validate All Input - ZEISS Digital Innovation Blog","isPartOf":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/#primaryimage"},"image":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201910_Security_Validate_All_Input_1.jpg","datePublished":"2019-10-21T13:35:52+00:00","dateModified":"2020-06-17T06:47:16+00:00","author":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/52922d077aabdd8130bc2df264e0cf5b"},"description":"The objective of validation is to verify that the data entering the system do not cause any damage or cause information to be leaked.","breadcrumb":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/#primaryimage","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201910_Security_Validate_All_Input_1.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201910_Security_Validate_All_Input_1.jpg","width":2000,"height":1433,"caption":"Nahaufnahme Laptop, davor miteinander vernetzte Icons"},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/lets-talk-about-security-validate-all-input\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/"},{"@type":"ListItem","position":2,"name":"Let&#8217;s Talk About Security \u2013 Validate All Input"}]},{"@type":"WebSite","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/","name":"Digital Innovation Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/52922d077aabdd8130bc2df264e0cf5b","name":"Neco Giedrojc","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/image\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/05\/giedrojc_neco-150x150.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/05\/giedrojc_neco-150x150.jpg","caption":"Neco Giedrojc"},"description":"Shortly after completing his degree in \"Computer Engineering\", Neco Giedrojc joined the test area of ZEISS Digital Innovation and works there as a tester. In his main project, he is currently dealing with the integration test of complex systems.","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/ennecogiedrojc\/"}]}},"author_meta":{"display_name":"Neco Giedrojc","author_link":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/ennecogiedrojc\/"},"featured_img":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201910_Security_Validate_All_Input_1-600x430.jpg","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/quality-assurance\/\" class=\"advgb-post-tax-term\">Quality Assurance<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Web<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Quality Assurance<\/span>","<span class=\"advgb-post-tax-term\">Web<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">FluentValidation<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Apache Commons Validators<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Express Validator<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Verifikation<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">black listing<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">white listing<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Security<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Regular-Expression<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Billion-Laughs-Attack<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Malware<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Django Validators<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Validation<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/web\/\" class=\"advgb-post-tax-term\">Input Validation<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">FluentValidation<\/span>","<span class=\"advgb-post-tax-term\">Apache Commons Validators<\/span>","<span class=\"advgb-post-tax-term\">Express Validator<\/span>","<span class=\"advgb-post-tax-term\">Verifikation<\/span>","<span class=\"advgb-post-tax-term\">black listing<\/span>","<span class=\"advgb-post-tax-term\">white listing<\/span>","<span class=\"advgb-post-tax-term\">Security<\/span>","<span class=\"advgb-post-tax-term\">Regular-Expression<\/span>","<span class=\"advgb-post-tax-term\">Billion-Laughs-Attack<\/span>","<span class=\"advgb-post-tax-term\">Malware<\/span>","<span class=\"advgb-post-tax-term\">Django Validators<\/span>","<span class=\"advgb-post-tax-term\">Validation<\/span>","<span class=\"advgb-post-tax-term\">Input Validation<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Posted 7 years ago","modified":"Updated 6 years ago"},"absolute_dates":{"created":"Posted on October 21, 2019","modified":"Updated on June 17, 2020"},"absolute_dates_time":{"created":"Posted on October 21, 2019 1:35 pm","modified":"Updated on June 17, 2020 6:47 am"},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/371","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/users\/76"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/comments?post=371"}],"version-history":[{"count":9,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/371\/revisions"}],"predecessor-version":[{"id":677,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/371\/revisions\/677"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/media\/374"}],"wp:attachment":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/media?parent=371"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/categories?post=371"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/tags?post=371"},{"taxonomy":"topics","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/topics?post=371"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}