qiita-markdown 0.29.0 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba9a61d760c878765f0d56a7b2be4b3d6d9f61eff2d104979ca5af3f0b481e60
4
- data.tar.gz: 727b673a4c63a45b633f9b5f7331239cea6ff5cd36b7c3c4655089a096026697
3
+ metadata.gz: 930ee5ee8bc770b95b918f3cfed4fdac57f133e9e69d0b21fff77cd2506a8fdc
4
+ data.tar.gz: 87f95cb871e08f94e1e03dd11a14ddd974ee24726b78ae3496bd3629e3b76959
5
5
  SHA512:
6
- metadata.gz: b3d2c8a721f25fa8010eaee9adcded2321e27eaf35c0092bd165e30d86163bfb872fb17962a5438a5233b0e861f7f1ccbcc3831bd0e924422ce8c46445882c35
7
- data.tar.gz: 5c3fdd91f7656e222050921ec233c24f82c81498ac0e8e42b889e1852af34d9bee113bb5134df702536b50d30202532358204828c46a29d5c57b99a42167f2b7
6
+ metadata.gz: 0ac7943de01ab9b05c990f6ec8abe64d37c780b186da66b30017129f014d7944aa60e437a9466033b2c801dd701fdf6564d30451bc2ece1d6551011ff44d814b
7
+ data.tar.gz: cb8bd175dcd7aec1685209eca0c51c396a80d686737267155d1815d98546f65d7fa5927cf525cb109ed777a5a92835239f59d46e70f246e8ddb1bd9b8f7ebac5
data/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  ## Unreleased
2
2
 
3
+ ## 0.34.0
4
+
5
+ - Delete gist embed rule to avoid XSS
6
+
7
+ ## 0.33.0
8
+
9
+ - Fix XSS possibility bug
10
+
11
+ ## 0.32.0
12
+
13
+ - Fix XSS possibility bug
14
+ - Fix iframe width to be fixed at 100%
15
+
16
+ ## 0.31.0
17
+
18
+ - Use greenmat 3.5.1.1
19
+
20
+ ## 0.30.0
21
+
22
+ - Use greenmat 3.5.1.0
23
+
3
24
  ## 0.29.0
4
25
 
5
26
  - Accept new embeded script and iframes
@@ -10,7 +10,6 @@ require "sanitize"
10
10
  require "qiita/markdown/embed/code_pen"
11
11
  require "qiita/markdown/embed/tweet"
12
12
  require "qiita/markdown/embed/asciinema"
13
- require "qiita/markdown/embed/gist"
14
13
  require "qiita/markdown/embed/youtube"
15
14
  require "qiita/markdown/embed/slide_share"
16
15
  require "qiita/markdown/embed/google_slide"
@@ -22,6 +22,7 @@ module Qiita
22
22
  def transform
23
23
  if name == "iframe"
24
24
  if URL_WHITE_LIST.include?(node["src"]) || HOST_WHITE_LIST.include?(host_of(node["src"]))
25
+ node["width"] = "100%"
25
26
  node.children.unlink
26
27
  else
27
28
  node.unlink
@@ -40,8 +41,11 @@ module Qiita
40
41
  end
41
42
 
42
43
  def host_of(url)
43
- Addressable::URI.parse(url).host if url
44
- rescue Addressable::URI::InvalidURIError
44
+ if url
45
+ scheme = URI.parse(url).scheme
46
+ Addressable::URI.parse(url).host if ["http", "https"].include? scheme
47
+ end
48
+ rescue Addressable::URI::InvalidURIError, URI::InvalidURIError
45
49
  nil
46
50
  end
47
51
  end
@@ -10,7 +10,6 @@ module Qiita
10
10
 
11
11
  HOST_WHITE_LIST = [
12
12
  Embed::Asciinema::SCRIPT_HOST,
13
- Embed::Gist::SCRIPT_HOST,
14
13
  ].flatten.freeze
15
14
 
16
15
  def self.call(*args)
@@ -43,8 +42,11 @@ module Qiita
43
42
  end
44
43
 
45
44
  def host_of(url)
46
- Addressable::URI.parse(url).host if url
47
- rescue Addressable::URI::InvalidURIError
45
+ if url
46
+ scheme = URI.parse(url).scheme
47
+ Addressable::URI.parse(url).host if ["http", "https"].include? scheme
48
+ end
49
+ rescue Addressable::URI::InvalidURIError, URI::InvalidURIError
48
50
  nil
49
51
  end
50
52
  end
@@ -1,5 +1,5 @@
1
1
  module Qiita
2
2
  module Markdown
3
- VERSION = "0.29.0"
3
+ VERSION = "0.34.0"
4
4
  end
5
5
  end
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_dependency "html-pipeline", "~> 2.0"
24
24
  spec.add_dependency "mem"
25
25
  spec.add_dependency "pygments.rb", "~> 1.0"
26
- spec.add_dependency "greenmat", "3.2.2.4"
26
+ spec.add_dependency "greenmat", "3.5.1.1"
27
27
  spec.add_dependency "sanitize"
28
28
  spec.add_dependency "addressable"
29
29
  spec.add_development_dependency "activesupport", "4.2.6"
@@ -740,7 +740,7 @@ describe Qiita::Markdown::Processor do
740
740
 
741
741
  it "generates footnotes elements" do
742
742
  should eq <<-HTML.strip_heredoc
743
- <p><sup id="fnref1"><a href="#fn1" rel="footnote" title="test">1</a></sup></p>
743
+ <p><sup id="fnref1"><a href="#fn1" title="test">1</a></sup></p>
744
744
 
745
745
  <div class="footnotes">
746
746
  <hr>
@@ -756,6 +756,25 @@ describe Qiita::Markdown::Processor do
756
756
  end
757
757
  end
758
758
 
759
+ context "with footenotes syntax with code block" do
760
+ let(:markdown) do
761
+ <<-MARKDOWN.strip_heredoc
762
+ ```
763
+ [^1]
764
+ [^1]: test
765
+ ```
766
+ MARKDOWN
767
+ end
768
+
769
+ it "generates only code blocks without footnotes" do
770
+ should eq <<-HTML.strip_heredoc
771
+ <div class="code-frame" data-lang="text"><div class="highlight"><pre><span></span>[^1]
772
+ [^1]: test
773
+ </pre></div></div>
774
+ HTML
775
+ end
776
+ end
777
+
759
778
  context "with manually written link inside of <sup> tag" do
760
779
  let(:markdown) do
761
780
  <<-MARKDOWN.strip_heredoc
@@ -1031,6 +1050,31 @@ describe Qiita::Markdown::Processor do
1031
1050
  end
1032
1051
  end
1033
1052
  end
1053
+
1054
+ context "with details tag" do
1055
+ let(:markdown) do
1056
+ <<-MARKDOWN.strip_heredoc
1057
+ <details><summary>Folding sample</summary><div>
1058
+
1059
+ ```rb
1060
+ puts "Hello, World"
1061
+ ```
1062
+ </div></details>
1063
+ MARKDOWN
1064
+ end
1065
+
1066
+ it "returns HTML output parsed as markdown" do
1067
+ expect(subject).to eq <<-HTML.strip_heredoc
1068
+ <p><details><summary>Folding sample</summary><div>
1069
+
1070
+ <div class="code-frame" data-lang="rb"><div class="highlight"><pre><span></span><span class="nb">puts</span> <span class="s2">"Hello, World"</span>
1071
+ </pre></div></div>
1072
+
1073
+ <p></p>
1074
+ </div></details></p>
1075
+ HTML
1076
+ end
1077
+ end
1034
1078
  end
1035
1079
 
1036
1080
  shared_examples_for "script element" do |allowed:|
@@ -1407,40 +1451,26 @@ describe Qiita::Markdown::Processor do
1407
1451
  end
1408
1452
  end
1409
1453
 
1410
- context "with HTML embed code for Gist" do
1454
+ context "with HTML embed code for Youtube" do
1411
1455
  let(:markdown) do
1412
1456
  <<-MARKDOWN.strip_heredoc
1413
- <script id="example" src="https://gist.github.com/a/example.js"></script>
1457
+ <iframe width="100" height="100" src="https://www.youtube.com/embed/example"></iframe>
1414
1458
  MARKDOWN
1415
1459
  end
1416
1460
 
1417
1461
  if allowed
1418
1462
  it "does not sanitize embed code" do
1419
1463
  should eq <<-HTML.strip_heredoc
1420
- <script id="example" src="https://gist.github.com/a/example.js"></script>
1464
+ <iframe width="100" height="100" src="https://www.youtube.com/embed/example"></iframe>
1421
1465
  HTML
1422
1466
  end
1423
1467
  else
1424
- it "forces async attribute on script" do
1468
+ it "forces width attribute on iframe" do
1425
1469
  should eq <<-HTML.strip_heredoc
1426
- <script id="example" src="https://gist.github.com/a/example.js" async="async"></script>
1470
+ <iframe width="100%" height="100" src="https://www.youtube.com/embed/example"></iframe>
1427
1471
  HTML
1428
1472
  end
1429
1473
  end
1430
- end
1431
-
1432
- context "with HTML embed code for Youtube" do
1433
- let(:markdown) do
1434
- <<-MARKDOWN.strip_heredoc
1435
- <iframe width="100" height="100" src="https://www.youtube.com/embed/example"></iframe>
1436
- MARKDOWN
1437
- end
1438
-
1439
- it "does not sanitize embed code" do
1440
- should eq <<-HTML.strip_heredoc
1441
- <iframe width="100" height="100" src="https://www.youtube.com/embed/example"></iframe>
1442
- HTML
1443
- end
1444
1474
 
1445
1475
  context "when url is privacy enhanced mode" do
1446
1476
  let(:markdown) do
@@ -1449,10 +1479,18 @@ describe Qiita::Markdown::Processor do
1449
1479
  MARKDOWN
1450
1480
  end
1451
1481
 
1452
- it "does not sanitize embed code" do
1453
- should eq <<-HTML.strip_heredoc
1454
- <iframe width="100" height="100" src="https://www.youtube-nocookie.com/embed/example"></iframe>
1455
- HTML
1482
+ if allowed
1483
+ it "does not sanitize embed code" do
1484
+ should eq <<-HTML.strip_heredoc
1485
+ <iframe width="100" height="100" src="https://www.youtube-nocookie.com/embed/example"></iframe>
1486
+ HTML
1487
+ end
1488
+ else
1489
+ it "forces width attribute on iframe" do
1490
+ should eq <<-HTML.strip_heredoc
1491
+ <iframe width="100%" height="100" src="https://www.youtube-nocookie.com/embed/example"></iframe>
1492
+ HTML
1493
+ end
1456
1494
  end
1457
1495
  end
1458
1496
  end
@@ -1464,10 +1502,18 @@ describe Qiita::Markdown::Processor do
1464
1502
  MARKDOWN
1465
1503
  end
1466
1504
 
1467
- it "does not sanitize embed code" do
1468
- should eq <<-HTML.strip_heredoc
1469
- <iframe width="100" height="100" src="https://www.slideshare.net/embed/example"></iframe>
1470
- HTML
1505
+ if allowed
1506
+ it "does not sanitize embed code" do
1507
+ should eq <<-HTML.strip_heredoc
1508
+ <iframe width="100" height="100" src="https://www.slideshare.net/embed/example"></iframe>
1509
+ HTML
1510
+ end
1511
+ else
1512
+ it "forces width attribute on iframe" do
1513
+ should eq <<-HTML.strip_heredoc
1514
+ <iframe width="100%" height="100" src="https://www.slideshare.net/embed/example"></iframe>
1515
+ HTML
1516
+ end
1471
1517
  end
1472
1518
  end
1473
1519
 
@@ -1478,10 +1524,18 @@ describe Qiita::Markdown::Processor do
1478
1524
  MARKDOWN
1479
1525
  end
1480
1526
 
1481
- it "does not sanitize embed code" do
1482
- should eq <<-HTML.strip_heredoc
1483
- <iframe src="https://docs.google.com/presentation/d/example/embed" frameborder="0" width="482" height="300" allowfullscreen="true"></iframe>
1484
- HTML
1527
+ if allowed
1528
+ it "does not sanitize embed code" do
1529
+ should eq <<-HTML.strip_heredoc
1530
+ <iframe src="https://docs.google.com/presentation/d/example/embed" frameborder="0" width="482" height="300" allowfullscreen="true"></iframe>
1531
+ HTML
1532
+ end
1533
+ else
1534
+ it "forces width attribute on iframe" do
1535
+ should eq <<-HTML.strip_heredoc
1536
+ <iframe src="https://docs.google.com/presentation/d/example/embed" frameborder="0" width="100%" height="300" allowfullscreen="true"></iframe>
1537
+ HTML
1538
+ end
1485
1539
  end
1486
1540
  end
1487
1541
 
@@ -1522,6 +1576,34 @@ describe Qiita::Markdown::Processor do
1522
1576
  HTML
1523
1577
  end
1524
1578
  end
1579
+
1580
+ context "with embed script code with xss" do
1581
+ let(:markdown) do
1582
+ <<-MARKDOWN.strip_heredoc
1583
+ <script async class="speakerdeck-embed" data-id="example" data-ratio="1.33333333333333" src="javascript://speakerdeck.com/assets/embed.js"></script>
1584
+ MARKDOWN
1585
+
1586
+ it "forces width attribute on iframe" do
1587
+ should eq <<-HTML.strip_heredoc
1588
+ \n
1589
+ HTML
1590
+ end
1591
+ end
1592
+ end
1593
+
1594
+ context "with embed iframe code with xss" do
1595
+ let(:markdown) do
1596
+ <<-MARKDOWN.strip_heredoc
1597
+ <iframe src="javascript://docs.google.com:80/%0d%0aalert(document.domain)" frameborder="0" width="482" height="300" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>
1598
+ MARKDOWN
1599
+
1600
+ it "forces width attribute on iframe" do
1601
+ should eq <<-HTML.strip_heredoc
1602
+ \n
1603
+ HTML
1604
+ end
1605
+ end
1606
+ end
1525
1607
  end
1526
1608
 
1527
1609
  context "without script and strict context" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qiita-markdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.29.0
4
+ version: 0.34.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-10 00:00:00.000000000 Z
11
+ date: 2021-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gemoji
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 3.2.2.4
89
+ version: 3.5.1.1
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: 3.2.2.4
96
+ version: 3.5.1.1
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: sanitize
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -258,7 +258,6 @@ files:
258
258
  - lib/qiita/markdown/base_processor.rb
259
259
  - lib/qiita/markdown/embed/asciinema.rb
260
260
  - lib/qiita/markdown/embed/code_pen.rb
261
- - lib/qiita/markdown/embed/gist.rb
262
261
  - lib/qiita/markdown/embed/google_slide.rb
263
262
  - lib/qiita/markdown/embed/slide_share.rb
264
263
  - lib/qiita/markdown/embed/speeker_deck.rb
@@ -1,9 +0,0 @@
1
- module Qiita
2
- module Markdown
3
- module Embed
4
- module Gist
5
- SCRIPT_HOST = "gist.github.com".freeze
6
- end
7
- end
8
- end
9
- end