qiita-markdown 0.29.0 → 0.34.0

Sign up to get free protection for your applications and to get access to all the features.
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