{"id":793,"date":"2017-04-20T05:54:52","date_gmt":"2017-04-20T04:54:52","guid":{"rendered":"https:\/\/dradisframework.com\/blog\/?p=793"},"modified":"2017-04-20T05:54:52","modified_gmt":"2017-04-20T04:54:52","slug":"dradis-attachments-api-using-ruby","status":"publish","type":"post","link":"https:\/\/dradis.com\/blog\/2017\/04\/dradis-attachments-api-using-ruby\/","title":{"rendered":"Attachments API using ruby"},"content":{"rendered":"<p>One of the latest additions in <a href=\"https:\/\/dradisframework.com\/pro\/\">Dradis Pro<\/a> <a href=\"https:\/\/dradisframework.com\/blog\/2017\/04\/new-dradis-pro-v2-6\/\">release 2.6.0<\/a> was the attachments API. Until now that was only available using the web interface:<\/p>\n<div id=\"attachment_814\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><img aria-describedby=\"caption-attachment-814\" decoding=\"async\" loading=\"lazy\" class=\"wp-image-814\" src=\"https:\/\/dradisframework.com\/blog\/wp-content\/uploads\/2017\/04\/attachments.png\" alt=\"Web interface attachments widget, instead of attachments api new endpoint\" width=\"300\" height=\"255\" \/><p id=\"caption-attachment-814\" class=\"wp-caption-text\">Web interface attachments widget<\/p><\/div>\n<p>As documented <a href=\"https:\/\/dradisframework.com\/pro\/support\/guides\/rest_api\/attachments.html\">here<\/a>\u00a0that new API endpoint allows to manipulate node attachments via REST requests. Here there are a couple of examples, using curl.<\/p>\n<p>Read attachments associated to a specific node:<\/p>\n<pre>curl \\\r\n -H 'Authorization: Token token=\"iOEFCQDR-miTHNTjiBxObjWC\"' \\\r\n -H 'Dradis-Project-Id: 8' \\\r\n http:\/\/dradis.ip\/pro\/api\/nodes\/18\/attachments<\/pre>\n<p>The response to this request is a JSON list of attachments in that node:<\/p>\n<pre class=\"p1\"><span class=\"s1\">[<\/span>\r\n<span class=\"s1\"><span class=\"Apple-converted-space\">\u00a0 <\/span>{<\/span>\r\n<span class=\"s1\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span>\"filename\": \"burp.xml\",<\/span>\r\n<span class=\"s1\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span>\"link\": \"\/nodes\/18\/attachments\/burp.xml\"<\/span>\r\n<span class=\"s1\"><span class=\"Apple-converted-space\">\u00a0 <\/span>},<\/span>\r\n<span class=\"s1\"><span class=\"Apple-converted-space\">\u00a0 <\/span>{<\/span>\r\n<span class=\"s1\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span>\"filename\": \"screenshot.png\",<\/span>\r\n<span class=\"s1\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span>\"link\": \"\/nodes\/18\/attachments\/screenshot.png\"<\/span>\r\n<span class=\"s1\">  }\r\n]<\/span><\/pre>\n<p>This is a request to attach some other files to that node:<\/p>\n<pre>curl \\\r\n -H 'Authorization: Token token=\"iOEFCQDR-miTHNTjiBxObjWC\"' \\\r\n -H 'Dradis-Project-Id: 8' \\\r\n -X POST \\\r\n -F 'files[]=@\/your\/local\/path\/image1.png' -F 'files[]=@\/your\/local\/path\/image2.png' \\\r\n http:\/\/dradis.ip\/pro\/api\/nodes\/18\/attachments<\/pre>\n<p>The response to this request is a JSON list containing the new attachments info:<\/p>\n<pre class=\"p1\"><span class=\"s1\">[<\/span>\r\n<span class=\"s1\"><span class=\"Apple-converted-space\">\u00a0 <\/span>{<\/span>\r\n<span class=\"s1\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span>\"filename\": \"image1.png\",<\/span>\r\n<span class=\"s1\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span>\"link\": \"\/nodes\/18\/attachments\/image1.png\"<\/span>\r\n<span class=\"s1\"><span class=\"Apple-converted-space\">\u00a0 <\/span>},\r\n<\/span>  <span class=\"s1\">{<\/span>\r\n<span class=\"s1\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span>\"filename\": \"image2.png\",<\/span>\r\n<span class=\"s1\"><span class=\"Apple-converted-space\">\u00a0 \u00a0 <\/span>\"link\": \"\/nodes\/18\/attachments\/image2.png\"<\/span>\r\n<span class=\"s1\"><span class=\"Apple-converted-space\">\u00a0 <\/span>}<\/span>\r\n<span class=\"s1\">]<\/span><\/pre>\n<p>In addition\u00a0in this post we would like to extend that documentation providing examples on how to do that using a programming language. Since Dradis is implemented in ruby, here is how we could do that in ruby.<\/p>\n<p>Using ruby there are many libraries that allow us to perform http requests, from the basic<br \/>\nalready included &#8216;<a href=\"https:\/\/docs.ruby-lang.org\/en\/2.4.0\/Net\/HTTP.html\">net\/http<\/a>&#8216; to more high level options like &#8216;<a href=\"https:\/\/github.com\/rest-client\/rest-client\">rest_client<\/a>&#8216;, &#8216;<a href=\"https:\/\/github.com\/lostisland\/faraday\">faraday<\/a>&#8216;, etc&#8230;<\/p>\n<p>We will show\u00a0basic examples using these three mentioned options.<br \/>\nFor each option we provide two examples:<\/p>\n<ol>\n<li>a request to get all attachments in a node<\/li>\n<li>a requests to upload a couple of files to a node (in the attachments endpoint many files can be uploaded with a single request).<\/li>\n<\/ol>\n<p>If you intend to use the examples below, remember that you should use your virtual appliance IP instead of &#8216;<em>dradis.ip<\/em>&#8216;. Also change the <em>token<\/em>, <em>project id<\/em> and <em>node id<\/em> in the examples to your own values.<\/p>\n<h3>Attachments API using\u00a0&#8216;rest-client&#8217; ruby gem:<\/h3>\n<p>First of all\u00a0we will need to install the &#8216;rest-client&#8217; ruby gem. It can be installed with:<\/p>\n<pre><em>gem install rest-client<\/em><\/pre>\n<p>Read attachments associated to a specific node:<\/p>\n<pre>require 'rest_client'\r\nRestClient.get(\r\n  'http:\/\/dradis.ip\/pro\/api\/nodes\/18\/attachments',\r\n  {\r\n    'Authorization' =&gt; 'Token token=\"iOEFCQDR-miTHNTjiBxObjWC\"',\r\n    'Dradis-Project-Id' =&gt; '8'\r\n  }\r\n)<\/pre>\n<p>Attach some other files to that node:<\/p>\n<pre>require 'rest_client'\r\nRestClient.post(\r\n  'http:\/\/dradis.ip\/pro\/api\/nodes\/18\/attachments',\r\n  {\r\n    'files' =&gt; [\r\n      File.new(\"\/your\/local\/path\/image1.png\", 'rb'),\r\n      File.new(\"\/your\/local\/path\/image2.png\", 'rb')\r\n    ]\r\n  },\r\n  {\r\n    'Authorization' =&gt; 'Token token=\"iOEFCQDR-miTHNTjiBxObjWC\"',\r\n    'Dradis-Project-Id' =&gt; '8'\r\n  }\r\n)<\/pre>\n<h3>Attachments API using\u00a0&#8216;faraday&#8217; ruby gem:<\/h3>\n<p>To install faraday:<\/p>\n<pre>gem install faraday<\/pre>\n<p>In this case we are trying to reuse the same connection, probably\u00a0useful when building a script that sends many requests to the same endpoint.<\/p>\n<pre>require 'faraday'\r\n\r\n# Establish connection\r\nconn = Faraday.new(\r\n  url: 'http:\/\/dradis.ip\/pro\/api\/nodes\/18\/attachments',\r\n  headers: {\r\n    'Authorization' =&gt; 'Token token=\"iOEFCQDR-miTHNTjiBxObjWC\"',\r\n    'Dradis-Project-Id' =&gt; '8'\r\n  }\r\n) do |faraday|\r\n  faraday.request :multipart\r\n  faraday.adapter :net_http\r\nend\r\n\r\n# Read attachments associated to a specific node:\r\nget = conn.get\r\nputs get.body\r\n\r\n# Attach some other files to that node\r\npost = conn.post(\r\n  nil,\r\n  {\r\n    'files' =&gt; [\r\n      Faraday::UploadIO.new(\"\/your\/local\/path\/image1.png\", 'image\/png'),\r\n      Faraday::UploadIO.new(\"\/your\/local\/path\/image2.png\", 'image\/png')\r\n    ]\r\n  }\r\n)\r\nputs post.body<\/pre>\n<h3>Attachments API using ruby &#8216;net\/http&#8217;:<\/h3>\n<p>&#8216;net\/http&#8217; is part\u00a0of the ruby standard library, so if you already have ruby nothing else should be installed to run this script. As a counterpart this option works at a lower level than the previous ones, therefore the code looks a bit more complex.<\/p>\n<pre>require 'net\/http'\r\n\r\nuri = URI('http:\/\/dradis.ip\/pro\/api\/nodes\/18\/attachments')\r\n\r\nNet::HTTP.start(uri.host, uri.port) do |http|\r\n \r\n  # Read attachments associated to a specific node:\r\n  get_request = Net::HTTP::Get.new uri\r\n  get_request['Authorization'] = 'Token token=\"iOEFCQDR-miTHNTjiBxObjWC\"'\r\n  get_request['Dradis-Project-Id'] = '8'\r\n  get_response = http.request(get_request)\r\n  puts get_response.body\r\n\r\n  # Attach some other files to that node:\r\n  BOUNDARY = \"AaB03x\"\r\n  file1 = '\/your\/local\/path\/image1.png'\r\n  file2 = '\/your\/local\/path\/image2.png'\r\n\r\n  post_body = []\r\n\r\n  post_body &lt;&lt; \"--#{BOUNDARY}\\r\\n\"\r\n\r\n  post_body &lt;&lt; \"Content-Disposition: form-data; name=\\\"files[]\\\"; filename=\\\"#{File.basename(file1)}\\\"\\r\\n\"\r\n  post_body &lt;&lt; \"Content-Type: image\/png\\r\\n\"\r\n  post_body &lt;&lt; \"\\r\\n\"\r\n  post_body &lt;&lt; File.read(file1)\r\n\r\n  post_body &lt;&lt; \"\\r\\n--#{BOUNDARY}\\r\\n\"\r\n\r\n  post_body &lt;&lt; \"Content-Disposition: form-data; name=\\\"files[]\\\"; filename=\\\"#{File.basename(file2)}\\\"\\r\\n\"\r\n  post_body &lt;&lt; \"Content-Type: image\/png\\r\\n\"\r\n  post_body &lt;&lt; \"\\r\\n\"\r\n  post_body &lt;&lt; File.read(file2)\r\n\r\n  post_body &lt;&lt; \"\\r\\n--#{BOUNDARY}--\\r\\n\"\r\n\r\n  post_request = Net::HTTP::Post.new uri\r\n  post_request['Authorization'] = 'Token token=\"iOEFCQDR-miTHNTjiBxObjWC\"'\r\n  post_request['Dradis-Project-Id'] = '8'\r\n  post_request.body = post_body.join\r\n  post_request[\"Content-Type\"] = \"multipart\/form-data, boundary=#{BOUNDARY}\"\r\n\r\n  post_response = http.request(post_request)\r\n  puts post_response.body\r\nend<\/pre>\n<h3>Final thoughts<\/h3>\n<p>In conclusion, sending requests to the API should be easy enough from any programming language. In the ruby case, using a specialized gem seems like the best choice.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of the latest additions in Dradis Pro release 2.6.0 was the attachments API. Until now that was only available using the web interface: As documented here\u00a0that new API endpoint allows to manipulate node attachments via REST requests. Here there are a couple of examples, using curl. Read attachments associated to a specific node: curl [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"jetpack_publicize_message":"How to use Dradis Attachments API using ruby","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":[]},"categories":[3],"tags":[],"jetpack_publicize_connections":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Attachments API using ruby - Dradis Framework Blog<\/title>\n<meta name=\"description\" content=\"Example ruby scripts to use the Dradis API attachments api endpoint. Using three different methods: res-client gem, faraday gem and the standard &#039;net\/http&#039;\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/dradis.com\/blog\/2017\/04\/dradis-attachments-api-using-ruby\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Attachments API using ruby - Dradis Framework Blog\" \/>\n<meta property=\"og:description\" content=\"Example ruby scripts to use the Dradis API attachments api endpoint. Using three different methods: res-client gem, faraday gem and the standard &#039;net\/http&#039;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/dradis.com\/blog\/2017\/04\/dradis-attachments-api-using-ruby\/\" \/>\n<meta property=\"og:site_name\" content=\"Dradis Framework Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-20T04:54:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/dradisframework.com\/blog\/wp-content\/uploads\/2017\/04\/attachments.png\" \/>\n<meta name=\"author\" content=\"Xavi Vila\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dradisfw\" \/>\n<meta name=\"twitter:site\" content=\"@dradisfw\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Xavi Vila\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/dradis.com\/blog\/2017\/04\/dradis-attachments-api-using-ruby\/\",\"url\":\"https:\/\/dradis.com\/blog\/2017\/04\/dradis-attachments-api-using-ruby\/\",\"name\":\"Attachments API using ruby - Dradis Framework Blog\",\"isPartOf\":{\"@id\":\"https:\/\/dradis.com\/blog\/#website\"},\"datePublished\":\"2017-04-20T04:54:52+00:00\",\"dateModified\":\"2017-04-20T04:54:52+00:00\",\"author\":{\"@id\":\"https:\/\/dradis.com\/blog\/#\/schema\/person\/70fb69f9349b31f6ad438de70548938e\"},\"description\":\"Example ruby scripts to use the Dradis API attachments api endpoint. Using three different methods: res-client gem, faraday gem and the standard 'net\/http'\",\"breadcrumb\":{\"@id\":\"https:\/\/dradis.com\/blog\/2017\/04\/dradis-attachments-api-using-ruby\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/dradis.com\/blog\/2017\/04\/dradis-attachments-api-using-ruby\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/dradis.com\/blog\/2017\/04\/dradis-attachments-api-using-ruby\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/dradis.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Attachments API using ruby\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/dradis.com\/blog\/#website\",\"url\":\"https:\/\/dradis.com\/blog\/\",\"name\":\"Dradis Framework Blog\",\"description\":\"Information management for security teams\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/dradis.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/dradis.com\/blog\/#\/schema\/person\/70fb69f9349b31f6ad438de70548938e\",\"name\":\"Xavi Vila\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/dradis.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e99426c952415b9f601a7bce968ddae6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e99426c952415b9f601a7bce968ddae6?s=96&d=mm&r=g\",\"caption\":\"Xavi Vila\"},\"url\":\"https:\/\/dradis.com\/blog\/author\/xavi\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Attachments API using ruby - Dradis Framework Blog","description":"Example ruby scripts to use the Dradis API attachments api endpoint. Using three different methods: res-client gem, faraday gem and the standard 'net\/http'","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:\/\/dradis.com\/blog\/2017\/04\/dradis-attachments-api-using-ruby\/","og_locale":"en_US","og_type":"article","og_title":"Attachments API using ruby - Dradis Framework Blog","og_description":"Example ruby scripts to use the Dradis API attachments api endpoint. Using three different methods: res-client gem, faraday gem and the standard 'net\/http'","og_url":"https:\/\/dradis.com\/blog\/2017\/04\/dradis-attachments-api-using-ruby\/","og_site_name":"Dradis Framework Blog","article_published_time":"2017-04-20T04:54:52+00:00","og_image":[{"url":"https:\/\/dradisframework.com\/blog\/wp-content\/uploads\/2017\/04\/attachments.png"}],"author":"Xavi Vila","twitter_card":"summary_large_image","twitter_creator":"@dradisfw","twitter_site":"@dradisfw","twitter_misc":{"Written by":"Xavi Vila","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/dradis.com\/blog\/2017\/04\/dradis-attachments-api-using-ruby\/","url":"https:\/\/dradis.com\/blog\/2017\/04\/dradis-attachments-api-using-ruby\/","name":"Attachments API using ruby - Dradis Framework Blog","isPartOf":{"@id":"https:\/\/dradis.com\/blog\/#website"},"datePublished":"2017-04-20T04:54:52+00:00","dateModified":"2017-04-20T04:54:52+00:00","author":{"@id":"https:\/\/dradis.com\/blog\/#\/schema\/person\/70fb69f9349b31f6ad438de70548938e"},"description":"Example ruby scripts to use the Dradis API attachments api endpoint. Using three different methods: res-client gem, faraday gem and the standard 'net\/http'","breadcrumb":{"@id":"https:\/\/dradis.com\/blog\/2017\/04\/dradis-attachments-api-using-ruby\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/dradis.com\/blog\/2017\/04\/dradis-attachments-api-using-ruby\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/dradis.com\/blog\/2017\/04\/dradis-attachments-api-using-ruby\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/dradis.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Attachments API using ruby"}]},{"@type":"WebSite","@id":"https:\/\/dradis.com\/blog\/#website","url":"https:\/\/dradis.com\/blog\/","name":"Dradis Framework Blog","description":"Information management for security teams","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/dradis.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/dradis.com\/blog\/#\/schema\/person\/70fb69f9349b31f6ad438de70548938e","name":"Xavi Vila","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dradis.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e99426c952415b9f601a7bce968ddae6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e99426c952415b9f601a7bce968ddae6?s=96&d=mm&r=g","caption":"Xavi Vila"},"url":"https:\/\/dradis.com\/blog\/author\/xavi\/"}]}},"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p3ijVs-cN","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":2384,"url":"https:\/\/dradis.com\/blog\/2024\/05\/new-in-dradis-pro-v4-12\/","url_meta":{"origin":793,"position":0},"title":"New in Dradis Pro v4.12","date":"May 9, 2024","format":false,"excerpt":"Dradis v4.12.0 includes CVSSv4, AWS and Azure official support, downloading attachments via the REST API, and Mappings Manager updates.","rel":"","context":"In &quot;Dradis_Pro&quot;","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dradis.com\/blog\/wp-content\/uploads\/2024\/01\/Screen-Shot-2024-01-16-at-4.41.11-PM.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1055,"url":"https:\/\/dradis.com\/blog\/2019\/08\/new-in-dradis-pro-v3-4\/","url_meta":{"origin":793,"position":1},"title":"New in Dradis Pro v3.4","date":"August 15, 2019","format":false,"excerpt":"https:\/\/www.youtube.com\/watch?v=VutJpHbT8dI Node Methodology Add a methodology to a node containing the details appropriate for that node type. Create and apply methodology templates to ensure everyone on the team knows the next steps for that node. Project methodologies are still available; these new methodologies bring the same consistency to nodes. Merging\u2026","rel":"","context":"In &quot;Dradis_Pro&quot;","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dradis.com\/blog\/wp-content\/uploads\/2019\/08\/Image-2019-08-13-at-8.52.17-PM.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":998,"url":"https:\/\/dradis.com\/blog\/2019\/04\/new-in-dradis-pro-v3-2\/","url_meta":{"origin":793,"position":2},"title":"New in Dradis Pro v3.2","date":"April 1, 2019","format":false,"excerpt":"Dradis Professional Edition is a collaboration and reporting tool for information security teams that will help you deliver the results of security assessments, in a fraction of the time without the time-wasting frustration of creating manual reports. What's new in Dradis Pro v3.2 Here is Rachael with a quick video\u2026","rel":"","context":"In &quot;Dradis_Pro&quot;","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dradis.com\/blog\/wp-content\/uploads\/2019\/03\/CVSSv3Calculator.gif?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":862,"url":"https:\/\/dradis.com\/blog\/2018\/01\/new-dradis-pro-v2-9\/","url_meta":{"origin":793,"position":3},"title":"New in Dradis Pro v2.9","date":"January 8, 2018","format":false,"excerpt":"Dradis Professional Edition is a collaboration and reporting tool for information security teams that will help you create the same reports, in a fraction of the time. For this release, we've squashed some pesky bugs and updated the system and its add-ons with new features that will make your team's\u2026","rel":"","context":"In &quot;Dradis_Pro&quot;","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dradisframework.com\/blog\/wp-content\/uploads\/2017\/12\/Screen-Shot-2017-12-22-at-7.44.08-PM.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2460,"url":"https:\/\/dradis.com\/blog\/2025\/01\/a-year-of-updates-2024-dradis-pro\/","url_meta":{"origin":793,"position":4},"title":"A Year of Updates [2024] &#8211; Dradis Pro","date":"January 7, 2025","format":false,"excerpt":"Dradis v4.11.0 includes bug fixes for both the Dradis app and Word exporter plus a few technical updates.","rel":"","context":"In &quot;Dradis_Pro&quot;","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dradis.com\/blog\/wp-content\/uploads\/2024\/01\/Screen-Shot-2024-01-16-at-4.41.11-PM.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2395,"url":"https:\/\/dradis.com\/blog\/2024\/08\/new-in-dradis-pro-v4-13\/","url_meta":{"origin":793,"position":5},"title":"New in Dradis Pro v4.13","date":"August 8, 2024","format":false,"excerpt":"Dradis v4.12.0 includes CVSSv4, AWS and Azure official support, downloading attachments via the REST API, and Mappings Manager updates.","rel":"","context":"In &quot;Dradis_Pro&quot;","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dradis.com\/blog\/wp-content\/uploads\/2024\/01\/Screen-Shot-2024-01-16-at-4.41.11-PM.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"https:\/\/dradis.com\/blog\/wp-json\/wp\/v2\/posts\/793"}],"collection":[{"href":"https:\/\/dradis.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dradis.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dradis.com\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/dradis.com\/blog\/wp-json\/wp\/v2\/comments?post=793"}],"version-history":[{"count":34,"href":"https:\/\/dradis.com\/blog\/wp-json\/wp\/v2\/posts\/793\/revisions"}],"predecessor-version":[{"id":830,"href":"https:\/\/dradis.com\/blog\/wp-json\/wp\/v2\/posts\/793\/revisions\/830"}],"wp:attachment":[{"href":"https:\/\/dradis.com\/blog\/wp-json\/wp\/v2\/media?parent=793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dradis.com\/blog\/wp-json\/wp\/v2\/categories?post=793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dradis.com\/blog\/wp-json\/wp\/v2\/tags?post=793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}