<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>article Security Developer Guideline in Custom Visuals Community Blog</title>
    <link>https://community.fabric.microsoft.com/t5/Custom-Visuals-Community-Blog/Security-Developer-Guideline/ba-p/217566</link>
    <description>&lt;P&gt;&lt;FONT size="4"&gt;Microsoft's best practices for building custom visuals in PowerBI&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Power BI enables developers to build their own custom visuals, and to visualize their business metrics the way they want them to be.&amp;nbsp;&lt;/P&gt;&lt;P&gt;As a developer of custom visuals, you need to be aware of the security implications and take steps to make sure your visuals are as secure as possible.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here are a few of the common web-based threats you should be aware of: &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Data leakage&lt;/LI&gt;&lt;LI&gt;XSS attack&lt;/LI&gt;&lt;LI&gt;Session hijack&lt;/LI&gt;&lt;LI&gt;Malicious infected files&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Power BI infrastructure and iframe sandboxing, along with today's browsers security, blocks most malicious attacks, but there are several precautions you can take to increase security even more.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Packages&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Before building a custom visual, you should consider the quality and popularity of packages and libraries you want to utilize.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Although there’s no strict policy about importing 3rd party vendor's libraries, we still review all packages before approving them.&amp;nbsp;&lt;/P&gt;&lt;P&gt;There could be many security issues for an unknown package, so it’s worthwhile to use Microsoft's recommended packages, such as D3, for creating graphics and charts, or Bootstrap if you want a modern CSS look and feel.&amp;nbsp;&lt;/P&gt;&lt;P&gt; &amp;nbsp;&lt;/P&gt;&lt;P&gt;Install an external JavaScript library by using any package manager (such as npm, yarn, etc.).&amp;nbsp;&lt;/P&gt;&lt;P&gt;To install external libraries onto a custom visual, please visit the following link&amp;nbsp;for more information:&lt;/P&gt;&lt;P&gt;&lt;A href="https://github.com/Microsoft/PowerBI-visuals/blob/master/Tutorial/ExternalLibraries.md" target="_blank"&gt;https://github.com/Microsoft/PowerBI-visuals/blob/master/Tutorial/ExternalLibraries.md&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Resources&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Before publishing a custom visual, we recommend reviewing the resources it includes.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Following the guidance in the following sections will help keep your visual as safe as possible:&amp;nbsp;&lt;/P&gt;&lt;P&gt; &amp;nbsp;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Do not use local resources that might disclose private information about you, your organization, or anything that's not specifically related to the Power BI visual.&amp;nbsp;&lt;/LI&gt;&lt;LI&gt;Try not to keep TODO tasks as comments inside the code, these can be viewed when debugging the visual at any point from the browser.&amp;nbsp;&lt;/LI&gt;&lt;LI&gt;Do not accept user input as a resource. For example, if you provide a set of colors to choose from, make sure to provide an element with hardcoded values, or values that came from your resource file. Do not let the user type the name of the color as a free text. Although programmatically this is possible, it requires a more robust input validation so it won't be bypassed, possibly causing a Code Injection or an &lt;A href="https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29" target="_blank"&gt;XSS&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;HTTP Requests&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;When running a custom visual, inspect the network requests it sends and gets.&amp;nbsp;&lt;/P&gt;&lt;P&gt;We recommend that developers keep control of their visuals’ network traffic and any external resources they consume.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Sandboxing&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;PowerBI contains each custom visual in a secure sandbox of its own,&lt;/P&gt;&lt;P&gt;This structure provides the necessary data isolation on the client side from one visual to another.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe" target="_self"&gt;Read more about sandbox attribute.&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Linting&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Linting helps developers align with the best developing practices, security practices and syntax standards.&amp;nbsp;&lt;/P&gt;&lt;P&gt; &amp;nbsp;&lt;/P&gt;&lt;P&gt;Microsoft's recommended linting rule sets&amp;nbsp;are the following:&lt;/P&gt;&lt;P&gt;&lt;A href="https://github.com/Microsoft/tslint-microsoft-contrib" target="_blank"&gt;https://github.com/Microsoft/tslint-microsoft-contrib&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt; &amp;nbsp;&lt;/P&gt;&lt;P&gt;Tslint&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="https://github.com/palantir/tslint" target="_blank"&gt;https://github.com/palantir/tslint&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt; &amp;nbsp;&lt;/P&gt;&lt;P&gt;The following commands install the necessary packages to properly lint your code”&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;npm install tslint --save-dev
npm install typings --save-dev
npm install tslint-microsoft-contrib --save-dev
tslint --init ( if tslint.json does not exist already )&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;TypeScript&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;TypeScript is a programming language developed by Microsoft.&amp;nbsp;&lt;/P&gt;&lt;P&gt;It is a strict superset of JavaScript meant to assist developers building large applications using static types, class-based OOP and modularity.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Even though it restricts the base code to types and classes, using TypeScript does not mean the code is safe from vulnerabilities.&amp;nbsp;&lt;/P&gt;&lt;P&gt;XSS attacks are possible if using a string that is not parsed correctly.&amp;nbsp;&lt;/P&gt;&lt;P&gt; &amp;nbsp;&lt;/P&gt;&lt;P&gt;Here are some rules you should keep in mind: &amp;nbsp;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Never trust user input or data&amp;nbsp;&lt;/LI&gt;&lt;LI&gt;Encode everything&amp;nbsp;&lt;/LI&gt;&lt;LI&gt;Keep data and markup separated&amp;nbsp;&lt;/LI&gt;&lt;LI&gt;Use DOM properties manipulation like setAttribute(), getAttribute() , .attr(), .append(element), etc'.&amp;nbsp;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;A href="https://developer.mozilla.org/en-US/docs/Web/API/Element" target="_blank"&gt;Read more about element properties.&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="https://github.com/Microsoft/TypeScript" target="_blank"&gt;More about TypeScript.&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Parsing user input&lt;BR /&gt;&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Avoid using .innerHTML, .HTML, .settimeout(paint()..., eval() and other risky JavaScript functions.&amp;nbsp;&lt;/P&gt;&lt;P&gt;If you want to add content to an element inside a visual please use the proper DOM API for it, for example: .append, .setAttribute, element.TextContext, element.text, etc....&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;We recommend using the &lt;A href="https://d3js.org/" target="_blank"&gt;D3 &lt;/A&gt;library, since D3 was tested and is very popular, it is safer to set and get user input with.&amp;nbsp;&lt;/P&gt;&lt;P&gt;When you use the D3 and the DOM API correctly, there is no need to perform vast input escaping - the browser API makes sure user input resides between the text apostrophes, rendered as text and not as HTML Markup, eliminating the risk of code injection and XSS attacks.&amp;nbsp;&lt;/P&gt;&lt;P&gt; &amp;nbsp;&lt;/P&gt;&lt;P&gt;Examples how to use D3 in a custom visual are found in the following location:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="https://github.com/Microsoft/PowerBI-visuals/tree/master/Tutorial" target="_blank"&gt;PowerBI-visuals/Tutorial&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt; &amp;nbsp;&lt;/P&gt;&lt;P&gt;In addition, you may want to check the latest &lt;A href="https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet#XSS_Prevention_Rules_Summary" target="_blank"&gt;OWASP recommendations&lt;/A&gt;.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;H1&gt;&lt;SPAN class="mw-headline"&gt;XSS Prevention Rules Summary&lt;/SPAN&gt;&lt;/H1&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The following HTML snippets demonstrate how to safely render untrusted data in a variety of different contexts.&amp;nbsp;&lt;/P&gt;&lt;P&gt;Data Type Context Code Sample Defense&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;String&lt;/TD&gt;&lt;TD&gt;HTML Body&lt;/TD&gt;&lt;TD&gt;&amp;lt;span&amp;gt;&lt;SPAN&gt;UNTRUSTED DATA&lt;/SPAN&gt;&amp;lt;/span&amp;gt;&lt;/TD&gt;&lt;TD&gt;&lt;UL&gt;&lt;LI&gt;&lt;A href="https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet#RULE_.231_-_HTML_Escape_Before_Inserting_Untrusted_Data_into_HTML_Element_Content" target="_blank" rel="nofollow"&gt;HTML Entity Encoding&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;String&lt;/TD&gt;&lt;TD&gt;Safe HTML Attributes&lt;/TD&gt;&lt;TD&gt;&amp;lt;input type="text" name="fname" value="&lt;SPAN&gt;UNTRUSTED DATA&lt;/SPAN&gt;"&amp;gt;&lt;/TD&gt;&lt;TD&gt;&lt;UL&gt;&lt;LI&gt;&lt;A href="https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet#RULE_.232_-_Attribute_Escape_Before_Inserting_Untrusted_Data_into_HTML_Common_Attributes" target="_blank" rel="nofollow"&gt;Aggressive HTML Entity Encoding&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;Only place untrusted data into a whitelist of safe attributes (listed below).&lt;/LI&gt;&lt;LI&gt;Strictly validate unsafe attributes such as background, id and name.&lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;String&lt;/TD&gt;&lt;TD&gt;GET Parameter&lt;/TD&gt;&lt;TD&gt;&amp;lt;a href="/site/search?value=&lt;SPAN&gt;UNTRUSTED DATA&lt;/SPAN&gt;"&amp;gt;clickme&amp;lt;/a&amp;gt;&lt;/TD&gt;&lt;TD&gt;&lt;UL&gt;&lt;LI&gt;&lt;A href="https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet#RULE_.235_-_URL_Escape_Before_Inserting_Untrusted_Data_into_HTML_URL_Parameter_Values" target="_blank" rel="nofollow"&gt;URL Encoding&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;String&lt;/TD&gt;&lt;TD&gt;Untrusted URL in a SRC or HREF attribute&lt;/TD&gt;&lt;TD&gt;&amp;lt;a href="&lt;SPAN&gt;UNTRUSTED URL&lt;/SPAN&gt;"&amp;gt;clickme&amp;lt;/a&amp;gt;&lt;BR /&gt;&amp;lt;iframe src="&lt;SPAN&gt;UNTRUSTED URL&lt;/SPAN&gt;" /&amp;gt;&lt;/TD&gt;&lt;TD&gt;&lt;UL&gt;&lt;LI&gt;Canonicalize input&lt;/LI&gt;&lt;LI&gt;URL Validation&lt;/LI&gt;&lt;LI&gt;Safe URL verification&lt;/LI&gt;&lt;LI&gt;Whitelist http and https URL's only (&lt;A title="Avoid the JavaScript Protocol to Open a new Window" href="https://www.owasp.org/index.php/Avoid_the_JavaScript_Protocol_to_Open_a_new_Window" target="_blank"&gt;Avoid the JavaScript Protocol to Open a new Window&lt;/A&gt;)&lt;/LI&gt;&lt;LI&gt;Attribute encoder&lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;String&lt;/TD&gt;&lt;TD&gt;CSS Value&lt;/TD&gt;&lt;TD&gt;&amp;lt;div style="width: &lt;SPAN&gt;UNTRUSTED DATA&lt;/SPAN&gt;;"&amp;gt;Selection&amp;lt;/div&amp;gt;&lt;/TD&gt;&lt;TD&gt;&lt;UL&gt;&lt;LI&gt;&lt;A href="https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet#RULE_.234_-_CSS_Escape_And_Strictly_Validate_Before_Inserting_Untrusted_Data_into_HTML_Style_Property_Values" target="_blank" rel="nofollow"&gt;Strict structural validation&lt;/A&gt;&lt;/LI&gt;&lt;LI&gt;CSS Hex encoding&lt;/LI&gt;&lt;LI&gt;Good design of CSS Features&lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;String&lt;/TD&gt;&lt;TD&gt;JavaScript Variable&lt;/TD&gt;&lt;TD&gt;&amp;lt;script&amp;gt;var currentValue='&lt;SPAN&gt;UNTRUSTED DATA&lt;/SPAN&gt;';&amp;lt;/script&amp;gt;&lt;BR /&gt;&amp;lt;script&amp;gt;someFunction('&lt;SPAN&gt;UNTRUSTED DATA&lt;/SPAN&gt;');&amp;lt;/script&amp;gt;&lt;/TD&gt;&lt;TD&gt;&lt;UL&gt;&lt;LI&gt;Ensure JavaScript variables are quoted&lt;/LI&gt;&lt;LI&gt;JavaScript Hex Encoding&lt;/LI&gt;&lt;LI&gt;JavaScript Unicode Encoding&lt;/LI&gt;&lt;LI&gt;Avoid backslash encoding (\" or \' or \\)&lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;HTML&lt;/TD&gt;&lt;TD&gt;HTML Body&lt;/TD&gt;&lt;TD&gt;&amp;lt;div&amp;gt;&lt;SPAN&gt;UNTRUSTED HTML&lt;/SPAN&gt;&amp;lt;/div&amp;gt;&lt;/TD&gt;&lt;TD&gt;&lt;UL&gt;&lt;LI&gt;&lt;A href="https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet#RULE_.236_-_Use_an_HTML_Policy_engine_to_validate_or_clean_user-driven_HTML_in_an_outbound_way" target="_blank" rel="nofollow"&gt;HTML Validation (JSoup, AntiSamy, HTML Sanitizer)&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;String&lt;/TD&gt;&lt;TD&gt;DOM XSS&lt;/TD&gt;&lt;TD&gt;&amp;lt;script&amp;gt;document.write(&lt;SPAN&gt;"UNTRUSTED INPUT: " + document.location.hash&lt;/SPAN&gt;);&amp;lt;script/&amp;gt;&lt;/TD&gt;&lt;TD&gt;&lt;UL&gt;&lt;LI&gt;&lt;A title="DOM based XSS Prevention Cheat Sheet" href="https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet" target="_blank"&gt;DOM based XSS Prevention Cheat Sheet&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#XSS_Prevention_Rules_Summary" target="_self"&gt;OWASP XSS CHEATSHEET&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Privacy&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;When developing a visual on your local workstation, developers sometimes test it with our own files, which usually contains some data, which you may not always want to expose or publish.&amp;nbsp;&lt;/P&gt;&lt;P&gt;In custom visuals there are several sections to check, in terms of ensuring security, before releasing a custom visual.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Do not include private files or folders such as node_modules, dist, all temp folders&amp;nbsp;&lt;/LI&gt;&lt;LI&gt;Check files signature - verify no private information is contained in your files (images, text files)&amp;nbsp;&lt;/LI&gt;&lt;LI&gt;Do not keep private configuration files on the git repository. (use .gitignore)&amp;nbsp;&lt;/LI&gt;&lt;LI&gt;Do not push temporary or redundant files to the git repository - only the files that the visual is using ( what pbiviz new creates for you + optional sample data for project )&amp;nbsp;&lt;/LI&gt;&lt;LI&gt;Make sure sample data is free of private company data.&amp;nbsp;&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Recap&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Packages, Resources, HTTP Requests, Sandboxing, Linting, TypeScript, Parsing user input, and Privacy&amp;nbsp;&lt;/P&gt;&lt;P&gt;Custom visuals provide a perfect platform to share your data visualization within, or out of your company, but make sure you keep the data &amp;amp; information safe on your side.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It is highly recommended to go through all the sections described in this document so you can harden your visuals before releasing them.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Stay safe,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Assaf Vilmovski&lt;/P&gt;&lt;P&gt;Power BI Custom visuals&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 09 Nov 2017 13:00:00 GMT</pubDate>
    <dc:creator>Assafv</dc:creator>
    <dc:date>2017-11-09T13:00:00Z</dc:date>
    <item>
      <title>Security Developer Guideline</title>
      <link>https://community.fabric.microsoft.com/t5/Custom-Visuals-Community-Blog/Security-Developer-Guideline/ba-p/217566</link>
      <description>&lt;P&gt;Microsoft's best practices for building custom visuals in PowerBI&lt;/P&gt;&lt;P&gt;----------------------------------------------------------------------&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Packages&lt;/LI&gt;&lt;LI&gt;Resources&lt;/LI&gt;&lt;LI&gt;HTTP Requests&lt;/LI&gt;&lt;LI&gt;Sandboxing&lt;/LI&gt;&lt;LI&gt;Linting&lt;/LI&gt;&lt;LI&gt;TypeScript&lt;/LI&gt;&lt;LI&gt;Parsing user input&lt;/LI&gt;&lt;LI&gt;Privacy&lt;/LI&gt;&lt;LI&gt;Recap&lt;/LI&gt;&lt;/UL&gt;</description>
      <pubDate>Thu, 09 Nov 2017 13:00:00 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Custom-Visuals-Community-Blog/Security-Developer-Guideline/ba-p/217566</guid>
      <dc:creator>Assafv</dc:creator>
      <dc:date>2017-11-09T13:00:00Z</dc:date>
    </item>
  </channel>
</rss>

