pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

IT用語

ハイプ・サイクル

ガートナー ジャパン | ハイプ・サイクル 2018年

テクノロジとアプリケーションの成熟度と採用状況、実際のビジネスにおける課題を解消する潜在的な能力、そしてテクノロジやアプリケーションが生み出す新たな機会などを提示するガートナーの代表的なリサーチの1つ

Webスクレイピング勉強

参考

Pythonでかんたんスクレイピング (JavaScript・Proxy・Cookie対応版) - Qiita

Requestモジュール
Developer Interface — Requests 2.21.0 documentation

BeautifulSoup
Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation
パーサではない。パーサー指定しパート毎に取り出すためのライブラリ。
 

メモ

BeautifulSoup

f:id:pikesaku:20190210230849p:plain

上記の"ハイプ・サイクルは〜"部分を取り出す場合、以下2つの方法あり。

soup.find("div", attrs={"class": "leftarea"}).text)
soup.find_all(attrs={"class": "leftarea"})[0].text

findでタグ指定し、属性で絞り込み。
find_allでタグ指定せず、属性で絞り込み。レスポンスはリスト。

サンプルコード

Javascript実行する必要があるやつ
けっこうはまった。。。先人に感謝!

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from bs4 import BeautifulSoup

def scraping(url):
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    driver = webdriver.Chrome(options=options)
    driver.get(url)
    driver.execute_script("return(bpsso.liMov(0))")
    a = driver.page_source.encode('utf-8')
    print(a)
    soup = BeautifulSoup(a, "lxml")
    print(soup.text)
    driver.quit()


if __name__ == '__main__':
    url = 'https://tech.nikkeibp.co.jp/top/it/'
    scraping(url)

 

JavaScript勉強

参考

Amazon CAPTCHA
昔買った本で勉強
 

メモ

JavaScriptが扱うオブジェクトは4つあり。
 

JavaScript固有オブジェクト

<html>
<head>
    <title>Test</title>
</head>
    <body>
        <script type="text/javascript">
                function hoge() {
                    this.height = 100;
                    this.width = 200;
                }
                var myobj = new hoge();
                alert(myobj.height);
                hoge.prototype.depth = 300;
                alert(myobj.depth);
                hoge.prototype.width = 400;
                alert(myobj.width);
        </script>

    </body>
</html>

 

②ブラウザオブジェクト

<html>

<head>
    <title>Test</title>
    <script type="text/javascript">
            function hoge() {
                document.getElementById("fuga").style.backgroundColor = "#AAA";
            }
    </script>
</head>

<body onClick="hoge()">
<h1 id="fuga">honya</h1>
</body>

</html>

 

③ライブラリ提供オブジェクト

実行するとCORSエラーになる。(Google Chrome Developer Toolエラー)
Access to XMLHttpRequest at 'http://dicom.nema.org/medical/dicom/current/source/docbook/part01/part01.xml' from origin 'http://localhost:63342' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
 
FireFoxの"CORS Anywhere"拡張プラグインで表示可能。

<html>

<head>
    <title>Test</title>
    <script src="https://ajax.googleapis.com/ajax/libs/prototype/1.7.2.0/prototype.js" type="text/javascript"></script>
    <script type="text/javascript">
            function hoge(uri) {
                target = "disp";
                new Ajax.Updater(target, uri, {method: "get"});
            }
    </script>
    <style type="text/css">
    #disp{border: 1px solid #aaa;width: 250px; height: 250px; padding: 5px;}
    </style>
</head>

<body>
    <form>
        <input type="button" id="btn01" name="btn01" value="No.1" onClick="hoge('http://dicom.nema.org/medical/dicom/current/source/docbook/part01/part01.xml')">
        <input type="button" id="btn02" name="btn02" value="No.2" onClick="hoge('http://dicom.nema.org/medical/dicom/current/source/docbook/part02/part02.xml')">
    </form>
    <div id="disp"></div>
</body>

</html>

 

JSONオブジェクト

<html>

<head>
    <title>Test</title>
    <script type="text/javascript">
            var myJSON = {apple:"APPLE", banana:"BANANA"}
    </script>
</head>

<body>
    <form>
        <input type="button" value="hoge" onClick="alert(myJSON.apple);">
    </form>
</body>

</html>

AWS S3のアクセス制御設定について

以下3種類あり

種類 説明
ACL バケット・オブジェクト単位で設定可能
BucketPolicy PolicyDocument利用のため、柔軟な設定が可能。オブジェクト単位不向き、バケット単位向き。
IAM PolicyDocument利用のため、柔軟な設定が可能。BukcetPolicyと違いIAMユーザー単位で制御が可能

 
参考URLから引用

f:id:pikesaku:20181210002028p:plain

クロスサイトスクリプティングについてメモ

いつまでたっても覚えない。メモしよう
 

仕組み

説明の前提条件

 
攻撃者のサイトのURL
http://cracker/index.html
 
index.htmlの内容

 
ターゲットサイト
http://target/
入力データの情報を、そのままブラウザに返してしまう。
例) 存在しないコンテンツa.htmlにアクセスがあった場合に、"a.htmlは存在しません"エラーを返す等(a.htmlは入力データで、エラーメッセージに利用してる)
 
 

攻撃の流れ

 
1. 騙される人が攻撃者のサイトにアクセス

2. リンクをクリック

3. ターゲットサイトに、

は存在しない。
ターゲットサイトがブラウザに、"ファイル名(スクリプト部分)は存在しません"的なエラーメッセージを返す。
このファイル名部分が、スクリプトのため、ブラウザで実行されてしまう。
  

ポイント

ターゲットサイトがユーザーからの入力情報をレスポンスデータとして出力する場合に影響あり。
ただ、これ自体は悪ではない。
スクリプト文字列が含まれてるのに、そのまま返すのが問題。
出力しないよう入力チェックしてないのが問題。
クエリ文字列にスクリプトを含めるのも可能。

追加

https://sites.google.com/site/ryouheivision/home/qing-baosekyuriti/kurosusaitosukuriputingu-xss-no-zhong-lei

上記サイト非常に良い!
攻撃説明コードつき!

反射型クロスサイトスクリプティング(Reflected XSS)
→このページで説明した内容

格納型クロスサイトスクリプティング(Stored XSS)
→登録した内容がDBに格納され、何かしらの操作で、ユーザーに表示されるwebサイトが対象

登録時の入力値チェック、表示時のサニタイズに不備があり発生。

攻撃者は登録しておけばいいだけ。

DOM Based XSS
javaスクリプト自体の不具合を悪用。スクリプトがブラウザに出力する機能の不具合を悪用し、悪意のある別のスクリプトを出力し、ブラウザに実行させる。
おそらく、元のスクリプトが引数を受け付けるのが前提で、不正な引数つきのリンクを何かしらの方法で実行させる。