SQLインジェクション対策について
教育的な観点ではなく実務的な観点から、僕の考えをまとめてみる。UTF-8 を利用し、SET NAMES を利用していなくて mysql で、クライアントプリペアドステートメントなケースを想定している。
$foo=$_POST[‘id’];
query(“SELECT * FROM foo WHERE id=$foo”);
のように外部からの文字列をそのまま使用してクエリを組みたてたときに、意図せぬ SQL を発行されてしまう脆弱性のことである。
| package main | |
| import "fmt" | |
| func main () { | |
| // 見つめ合う | |
| fmt.Println("おっくせんまん!おっくせんまん!!") | |
| defer fmt.Println("ジャパン!!!"); | |
| } |
| // ==UserScript== | |
| // @name display datetime on Github issue | |
| // @namespace userjs.com.cosmio.pastak | |
| // @description | |
| // @include https://github.com/*/pull/* | |
| // @include https://github.com/*/issues/* | |
| // ==/UserScript== | |
| $(function() { | |
| var usdate = $('.discussion-topic-header time').attr('datetime'); | |
| var msec = msec = Date.parse(usdate); |
| package main | |
| import "fmt" | |
| func mynumber() map[string]func(int) int { | |
| sum := 0 | |
| result := make(map[string]func(int)int) | |
| result["add"] = func(x int) int { | |
| sum += x | |
| return sum |
| # 私が考える安全なプログラムを書くために必要なこと | |
| 今も昔も「入力によって挙動が大幅に変わるAPI」が世の中には多数存在していて、プログラマが本来意図した挙動と異なる動作を引き起こしている。 | |
| - ファイルを開こうとしたらコマンドを実行できてしまったり | |
| - CSSセレクタを書いてるつもりがHTMLタグを生成してしまったり | |
| - SELECT文を発行するつもりがDELETE文を発行できてしまったり | |
| こういったときに | |
| - 入力値検証をしないと危険になる |
| declare var Vue: VueStatic; | |
| interface VueObject{ | |
| } | |
| interface VueMethods{ | |
| [n: string]: Function; | |
| } | |
| interface VueAttributes{ |
| package HTTP::Body::JSON; | |
| use strict; | |
| use warnings; | |
| use parent qw(HTTP::Body); | |
| use JSON::XS; | |
| use HTTP::Body; | |
| use Encode qw(encode_utf8); | |
| # based on tokuhirom-san's code |
| diff --git a/lib/Plack/Request/WithEncoding.pm b/lib/Plack/Request/WithEncoding.pm | |
| index 45d3d3f..aa8f36b 100644 | |
| --- a/lib/Plack/Request/WithEncoding.pm | |
| +++ b/lib/Plack/Request/WithEncoding.pm | |
| @@ -81,11 +81,34 @@ sub _decode_parameters { | |
| my @flatten = $stuff->flatten; | |
| my @decoded; | |
| while ( my ($k, $v) = splice @flatten, 0, 2 ) { | |
| - push @decoded, $encoding->decode($k), $encoding->decode($v); | |
| + push @decoded, $self->__decode($encoding, $k), $self->__decode($encoding, $v); |