Inkscapeで作成したSVGから個人情報流出の可能性
![パソコンの上に南京錠が置かれた画像](/_astro/computer-1591018_1920.CRxcbqCD_g1ej1.webp)
今日の別の記事にも書きましたが、このブログのAMP化の作業をしました。そのとき、SVGファイルをテキストエディターで開いたら個人情報が含まれていたので記事にしました。
最初に断っておきますが、SVGに含まれる個人情報というのはPCのユーザー名です。PCのユーザー名はパスワードや住所でもないので個人情報だと考えるかは人それぞれですが、場合によっては本名がバレるということでここでは個人情報として扱います。
ちなみに、こんな記事を書いておきながら、私はPCのユーザー名くらい別にいいかなと思います…。
この問題が発生するのはオープンソースのベクターグラフィックエディターのInkscapeとWindows 10を使用した場合です。他の環境ではどうなるか分かりませんが、おそらくInkscapeを使用していればOSに関係なくこの問題が発生するでしょう。
詳細
この問題はInkscapeを使用してSVG画像を作成し、そのデータをインターネットでの公開を含め誰かに渡したり見せたりする場合に発生します。
まず、以下がInkscapeで作成した空のSVGファイルです。ファイルの保存形式はデフォルトのInkscape SVGを選択しました。この時点ではまだ個人情報は含まれていません。
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>2<svg3 xmlns:dc="http://purl.org/dc/elements/1.1/"4 xmlns:cc="http://creativecommons.org/ns#"5 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"6 xmlns:svg="http://www.w3.org/2000/svg"7 xmlns="http://www.w3.org/2000/svg"8 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"9 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"10 sodipodi:docname="ファイル名.svg"11 inkscape:version="1.0 (4035a4fb49, 2020-05-01)"12 id="svg8"13 version="1.1"14 viewBox="0 0 210 297"15 height="297mm"16 width="210mm">17 <defs18 id="defs2" />19 <sodipodi:namedview20 inkscape:window-maximized="1"21 inkscape:window-y="-6"22 inkscape:window-x="-6"23 inkscape:window-height="850"24 inkscape:window-width="1368"25 showgrid="false"26 inkscape:document-rotation="0"27 inkscape:current-layer="layer1"28 inkscape:document-units="mm"29 inkscape:cy="560"30 inkscape:cx="400"31 inkscape:zoom="0.35"32 inkscape:pageshadow="2"33 inkscape:pageopacity="0.0"34 borderopacity="1.0"35 bordercolor="#666666"36 pagecolor="#ffffff"37 id="base" />38 <metadata39 id="metadata5">40 <rdf:RDF>41 <cc:Work42 rdf:about="">43 <dc:format>image/svg+xml</dc:format>44 <dc:type45 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />46 <dc:title></dc:title>47 </cc:Work>48 </rdf:RDF>49 </metadata>50 <g51 id="layer1"52 inkscape:groupmode="layer"53 inkscape:label="レイヤー 1" />54</svg>
そして、以下は同じ内容をプレーンSVGを選択して保存したものです。同じく、これもまだ個人情報は含まれていません。
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>2<svg3 xmlns:dc="http://purl.org/dc/elements/1.1/"4 xmlns:cc="http://creativecommons.org/ns#"5 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"6 xmlns:svg="http://www.w3.org/2000/svg"7 xmlns="http://www.w3.org/2000/svg"8 id="svg836"9 version="1.1"10 viewBox="0 0 210 297"11 height="297mm"12 width="210mm">13 <defs14 id="defs830" />15 <metadata16 id="metadata833">17 <rdf:RDF>18 <cc:Work19 rdf:about="">20 <dc:format>image/svg+xml</dc:format>21 <dc:type22 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />23 <dc:title></dc:title>24 </cc:Work>25 </rdf:RDF>26 </metadata>27 <g28 id="layer1" />29</svg>
ところが、Inkscapeの「PNG画像にエクスポート」機能を使ったあとのSVGファイルには個人情報が含まれるようになります。以下は、Inkscape SVGで保存した場合です。
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>2<svg3 xmlns:dc="http://purl.org/dc/elements/1.1/"4 xmlns:cc="http://creativecommons.org/ns#"5 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"6 xmlns:svg="http://www.w3.org/2000/svg"7 xmlns="http://www.w3.org/2000/svg"8 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"9 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"10 inkscape:export-ydpi="96"11 inkscape:export-xdpi="96"12 inkscape:export-filename="C:\Users\ユーザー名\エクスポート先のファイル名.png"13 width="210mm"14 height="297mm"15 viewBox="0 0 210 297"16 version="1.1"17 id="svg8"18 inkscape:version="1.0 (4035a4fb49, 2020-05-01)"19 sodipodi:docname="ファイル名.svg">20 <defs21 id="defs2" />22 <sodipodi:namedview23 id="base"24 pagecolor="#ffffff"25 bordercolor="#666666"26 borderopacity="1.0"27 inkscape:pageopacity="0.0"28 inkscape:pageshadow="2"29 inkscape:zoom="0.35"30 inkscape:cx="400"31 inkscape:cy="560"32 inkscape:document-units="mm"33 inkscape:current-layer="layer1"34 inkscape:document-rotation="0"35 showgrid="false"36 inkscape:window-width="1368"37 inkscape:window-height="850"38 inkscape:window-x="-6"39 inkscape:window-y="-6"40 inkscape:window-maximized="1" />41 <metadata42 id="metadata5">43 <rdf:RDF>44 <cc:Work45 rdf:about="">46 <dc:format>image/svg+xml</dc:format>47 <dc:type48 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />49 <dc:title></dc:title>50 </cc:Work>51 </rdf:RDF>52 </metadata>53 <g54 inkscape:label="レイヤー 1"55 inkscape:groupmode="layer"56 id="layer1" />57</svg>
以下は、プレーンSVGの場合です。
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>2<svg3 xmlns:dc="http://purl.org/dc/elements/1.1/"4 xmlns:cc="http://creativecommons.org/ns#"5 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"6 xmlns:svg="http://www.w3.org/2000/svg"7 xmlns="http://www.w3.org/2000/svg"8 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"9 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"10 inkscape:export-ydpi="96"11 inkscape:export-xdpi="96"12 inkscape:export-filename="C:\Users\ユーザー名\エクスポート先のファイル名.png"13 sodipodi:docname="ファイル名.svg"14 inkscape:version="1.0 (4035a4fb49, 2020-05-01)"15 id="svg836"16 version="1.1"17 viewBox="0 0 210 297"18 height="297mm"19 width="210mm">20 <defs21 id="defs830" />22 <sodipodi:namedview23 inkscape:window-maximized="0"24 inkscape:window-y="0"25 inkscape:window-x="0"26 inkscape:window-height="872"27 inkscape:window-width="1368"28 showgrid="false"29 inkscape:document-rotation="0"30 inkscape:current-layer="layer1"31 inkscape:document-units="mm"32 inkscape:cy="560"33 inkscape:cx="400"34 inkscape:zoom="0.35"35 inkscape:pageshadow="2"36 inkscape:pageopacity="0.0"37 borderopacity="1.0"38 bordercolor="#666666"39 pagecolor="#ffffff"40 id="base" />41 <metadata42 id="metadata833">43 <rdf:RDF>44 <cc:Work45 rdf:about="">46 <dc:format>image/svg+xml</dc:format>47 <dc:type48 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />49 <dc:title></dc:title>50 </cc:Work>51 </rdf:RDF>52 </metadata>53 <g54 id="layer1"55 inkscape:groupmode="layer"56 inkscape:label="レイヤー 1" />57</svg>
さて、どこが問題か分かりましたか?問題があるのは、次の部分です。これは、Inkscape SVGとプレーンSVGで共通です。
1inkscape:export-filename="C:\Users\ユーザー名\エクスポート先のファイル名.png"
注)「ユーザー名」と「エクスポート先のファイル名」にはそれぞれ実際の値が入りますが、ここでは例としてこのように書いています。
これらは、エクスポートしたPNG画像の絶対パスです。設定として保存されているのでしょう。
「ユーザー名」にはそのPCにログインしているユーザー名が入ります。Windows 10以外のOSでもパスのどこかしらにユーザー名が入るでしょう。
このように、個人情報が含まれているのです。これをローカルで使用するだけなら問題ないですが、ファイルを配布したりインターネットで公開したりすると、ユーザー名が流出することになります。
対策方法
この問題は、ユーザー名を初期設定のときに設定したものから変更している場合は古いユーザー名が流出するだけなので問題ないですね。
しかし、変更していない場合は影響を受けます。対策方法としては、テキストエディターでそのファイルを開いて
1inkscape:export-filename="C:\Users\ユーザー名\エクスポート先のファイル名.png"
の1行をまるごと削除します。
ちなみに
ちなみに、そんな人がいるか分かりませんが、ファイル名に嫌いな人の悪口やFワードを付けて保存している場合はもう1つ気をつける点があります。
配布や公開する前にファイル名だけ変えても、前のファイル名がバレてしまいます。これは、「PNG画像にエクスポート」を使用しなくても発生します。問題があるのは、Inkscape SVGとプレーンSVGに共通で次の部分です。
1sodipodi:docname="ファイル名.svg"
注)「ファイル名」には実際のSVGのファイル名が入ります。
ちなみに、ファイル名変更後Inkscapeでファイルを開き、編集して保存すれば「ファイル名」の部分は更新されます。Inkscapeで開いて保存しても、ファイルを編集しないと更新されません。
さいごに
こんな記事を書きましたが、別にInkscapeが嫌いで批判したいわけではありません。
あのソフトが無料で使えるのは本当に素晴らしいですし、この記事で指摘した問題のある部分は設定を保存することでInkscapeをより使いやすくするためのものですから、仕方ないでしょう。また、個人情報といってもPCのユーザー名です。
一方で、気にする人がいるのも事実なので、この記事がSVG画像を公開する人の役に少しでも立てば嬉しいです。
最後までお読みいただき、ありがとうございました。