トップページ⇒php
1001コメント336KB

【PHP】下らねぇ質問はここに書き込みやがれ 35

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/12/21(木) 13:42:19ID:???
PHPに関する質問用スレです。ここならお前の下らない質問に回答があるかも知れません。

まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 34
http://pc8.2ch.net/test/read.cgi/php/1165519374/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc8.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc8.2ch.net/db/subback.html
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
 しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
0488nobodyさん2006/12/30(土) 16:43:30ID:???
http://pear.php.net/package/Crypt_Blowfish
0489nobodyさん2006/12/30(土) 16:51:21ID:???
>>786
対症療法だけど、extension_loaded('sqlite')の代わりにdefined('SQLITE_OK')使えばいいんじゃない?
0490nobodyさん2006/12/30(土) 17:04:16ID:???
452絡みだけど、パスワードを暗号化して保存するのって一般的なの?
サーバ機が自分の管理下にあるならその必要はないし、レンサバみたいな環境なら、サーバ管理者が利用者のパスワードを覗く方法なんていくらでもある(サーバのログとか)わけだから、暗号化してもしょうがない気がするんだけど。
0491nobodyさん2006/12/30(土) 17:16:40ID:???
>>490
・暗号化しておけば何らかのセキュリティホールでデータが漏れても生のパスワードは漏れない。
・(利用者からみて)大企業でもデータ漏れをやらかすのに個人の管理者なんて信用できない。
0492nobodyさん2006/12/30(土) 17:20:39ID:???
>>485
嘘つくなよ
0493nobodyさん2006/12/30(土) 17:27:47ID:???
>>490
俺のパスワードが流出したら責任とって被害額を賠償してくれるんだね?
0494nobodyさん2006/12/30(土) 19:07:41ID:kiTSZZLq
PHP部の最後に
session_destroy();
を入れたら
エラー:
Trying to destroy uninitialized session
が出ました。
ログイン画面なので、クライアントがセッション値を保持していなくても
念のためにセッションを全破棄させたいのですが、
session_destroy();
ではダメなのでしょうか?
0495nobodyさん2006/12/30(土) 19:54:15ID:???
OS のロードを得るような PHP の関数って無いでしょうか?
ロードが高いときにはいくつかの処理をスキップするような
プログラムを書きたいのですが。
0496nobodyさん2006/12/30(土) 20:42:45ID:???
web特化なんです!ごめんなさい><
0497nobodyさん2006/12/30(土) 21:35:33ID:???
>>491
セキュリティホールを危惧して暗号化、ってのはわからなくもないけど・・・。

もしデータベースの生データが外部に漏れるような大惨事が起こってしまったとしたら、ログイン用パスワードだけが暗号化されてたかどうかなんて、大した問題じゃないような気もする。
サーバの管理人が信用できない場合には、そのサーバ管理人に漏れたら大きな損害が発生し得るサイトの運営は、そもそも避けるべきだしね。

それよりかサイトに訪問する側としては、パスワードを忘れた場合に復元してくれる機能はあった方がありがたい(特に、記憶にあまり残らない、どうでもいいサイトであればあるほど)。
つーか、大規模なサイトでもパスワード復元機能ってけっこうあるじゃん。

>>493
こちらで明示したプライバシーポリシーに反する形で、万一そんな失態を犯してしまったら、謹んでお詫びするし、相応の金も払うよ。
0498nobodyさん2006/12/30(土) 21:41:27ID:???
>>495
つ SNMP関数

サーバでSNMPが有効になってる必要があるけど。
0499nobodyさん2006/12/30(土) 21:41:49ID:???
>>497
ぜんぜんわかってないな。
まず全てのデータベースが名前や住所を保存してるわけではない。
メアドとパスワードのみで会員登録できるサービスもある。
だからパスワードが漏れたことのみが問題になるケースもある。そして、

>こちらで明示したプライバシーポリシーに反する形で、
>万一そんな失態を犯してしまったら、謹んでお詫びするし、相応の金も払うよ。

同じパスを使ってるユーザーなんて五万といるし、
メアド+パスで他のサービスも入り放題。
「相応の金」はあんたのサービスで被った被害だけにとどまらないよ。

>つーか、大規模なサイトでもパスワード復元機能ってけっこうあるじゃん。

あるねー。よくこんなリスキーなことするなあって感心してるよ。
0500nobodyさん2006/12/31(日) 02:31:47ID:bO4aspIb
pngファイルからswfファイルに変換する方法ってありますか?
0501nobodyさん2006/12/31(日) 02:39:43ID:???
>>500
何をしたいのか良くわからんが(swfってただの画像フォーマットじゃないだろ?)、
Shockwave Flash 関数(http://jp2.php.net/manual/ja/ref.swf.php)と
イメージ関数(http://jp2.php.net/manual/ja/ref.image.php)でも眺めてみたらどうだ。
05025002006/12/31(日) 03:16:04ID:bO4aspIb
>>501
ありがとうございます。参考にして見ます。
0503nobodyさん2006/12/31(日) 03:17:02ID:???
よかったぁ〜
とりあげずパスワード復元〜〜とか、俺のパスワード〜〜
って能書きこいてる奴に攻撃されても大丈夫だ
0504nobodyさん2006/12/31(日) 03:24:15ID:???
今年最後の日本語でおk
0505nobodyさん2006/12/31(日) 06:15:42ID:???
>>498 THX
そうか、SNMP を使うという手があったか。
0506nobodyさん2006/12/31(日) 08:06:07ID:B2TdPhYS
fopen()のmodeを見ると、
どれもファイルポインタを先頭か終端に置くと書いています。
これはつまり、ログなどを追加して書き込むときは、
ログファイルの先頭か終端からしか書き込めないということを示しているのですか?
それとも何行目とか、この文字列の後とか指定できるのでしょうか?

ログにxmlを使っていて、先頭が<?xml version〜になっているので、
どうログを追加しようかと悩んでいます。

ログをxmlにするときは、元のログファイルを文字列に読み込んで、
文字列にログを追加した後、
一旦ログを空にして、書き込みなおすという方法しかないのでしょうか?

書き込みなおす方法でもいいのですが、レスポンスが悪そうな気がして・・・
0507nobodyさん2006/12/31(日) 09:19:33ID:???
>>506
ファイルっていうのは基本的にそういうもの >先頭から上書きしてしまうか、終端に続けるか
ファイルは全体丸ごとで1塊のものであって、「途中に挿入する」というのは
後半部分を挿入内容の分だけ後ろにずらして移動させるような処理が必要で、
そのような機能はOSのファイル機能の中には含まれていない。

お手軽な手法としては「全部読み込んで文字列を編集して全部書き込み直し」かと。
レスポンスを気にするなら「挿入位置より後半だけ読み込んで以降を削除→挿入内容+後半内容を追記」
などという手も取れなくは無い。

でも別システムとの受け渡し用の一時データファイルならともかく、次々と追記される目的の
ログファイルにXMLを使うこと自体が間抜けな設計に思えるけど。
0508nobodyさん2006/12/31(日) 10:12:06ID:???
データベースへの接続のためのパスワードって
どこに書いておくのが安全なんでしょうか?

スクリプトは当然 Apache から読めないとダメなので、

1)誰でも読めるようにする→論外
2)Apache プロセスと同じユーザ(例:ユーザ名 apache)が読めるようにする
3)Apache プロセスと同じグループ(例:グループ名 apache)が読めるようにする

の選択肢しかないように思えるのですが、
他に何かいい方法があるのでしょうか?

同じサーバを使っている他のユーザから見られないようにしたい、
でも Apache からは見られるようにしたい、ということです。
ACL が使えるファイルシステムならいいのでしょうけど・・・
サーバは Debian GNU/Linux etch です。
05095082006/12/31(日) 10:14:10ID:???
PHP スクリプトだけどあえて CGI として作り、
suExec を使うというのはできれば避けたいです。
05105062006/12/31(日) 10:20:35ID:B2TdPhYS
>>507
ご丁寧に解説していただきありがとうございます。
これできっぱりfopen()でどうにかするという方法は諦めがつきました。

>お手軽な手法としては「全部読み込んで文字列を編集して全部書き込み直し」かと。
やはりこの方法がいいんですかね。
今回のようなケースはこの方法をとりたいと思います。

>でも別システムとの受け渡し用の一時データファイルならともかく、次々と追記される目的の
>ログファイルにXMLを使うこと自体が間抜けな設計に思えるけど。
仰るとおりですね。XMLにする必要ないですね。
普通のテキストファイルにして、fopenでファイルの終端に置くことにします。

どうもアドバイスありがとうございました。
0511nobodyさん2006/12/31(日) 11:32:08ID:Exl/tsr7
>>499
レンサバでメアド+パスワードで登録できるサービスやってるんですけど、かなり危険ですか?
0512nobodyさん2006/12/31(日) 15:35:52ID:???
$a = array (array('hoge', 'foo', 'bar'),
array('koko', 'mo'));
という配列の最後に同じ文字列を追加したいのですがどうすればいいでしょうか?
$in = '入れたい';
$a = array (array('hoge', 'foo', 'bar', $in),
array('koko', 'mo', $in));  //実際はもっとたくさん配列があります。
こんな感じにしたいです。
0513nobodyさん2006/12/31(日) 15:37:14ID:???
>>512
foreachでまわして追加すればいいんじゃね。
0514nobodyさん2006/12/31(日) 15:50:18ID:???
>>513
foreach($a as $val => $key){
array_push($key, $in);
}
で入ると思ったんですけど追加されないんですよ。
0515nobodyさん2006/12/31(日) 16:17:15ID:???
>>512
PHP5なら
foreach ($a as &$value) {
$value[] = $in;
}

それ以前なら(動作確認してないので注意)
$all_push = create_function('$arr, $data', 'return $arr[] = $data;')
$a = array_map($all_push, $a, $in);
0516nobodyさん2006/12/31(日) 16:44:21ID:???
function example($a, $b) {
〜
}

この$aと$bというのは、いきなり書いていいのでしょうか?
それとも、この関数の前に、$a = ""; $b = "";とか書いとくべきですか?
0517nobodyさん2006/12/31(日) 16:49:44ID:???
>>516
http://jp2.php.net/manual/ja/language.functions.php
0518nobodyさん2006/12/31(日) 17:31:11ID:???
ユーザー定義関数について質問なんですが、
複数引数がある時、個別に引数ってとれるでしょうか?
説明が下手で申し訳ないのですが、具体的には、

function func($a,$b){
$c = "{$a}さんは{$b}型です";
return $c;
}

ここで、funcの第一引数$aが佐藤だったら田中に置き換えみたいなことがしたいです。

if(preg_match("/佐藤/",func($a)){
では、第2引数がないと怒られます。
if(preg_match("/佐藤/",func("佐藤","A")){
だと、第2引数もろとも置き換え対象になってしまいます。

どう書いたらいいのかわからなくて困っているので、
どなかたお助けください。
05195182006/12/31(日) 17:51:48ID:???
置き換えしようという考えが間違っていたみたいです。
関数内に、
if($a=="佐藤"){
$a=="田中";
}
でいけました。
ということで自己解決です。
0520nobodyさん2006/12/31(日) 18:20:39ID:???
ナイス解決
0521nobodyさん2006/12/31(日) 18:30:33ID:???
SimpleXML関数を使って、XMLを書き出しているのですが、
addChildで要素を加えた時、CDATAセクションが作成できません。
addChild("cdata", "<![CDATA[ ]]>");
というのも、<>がエスケープされて&lt; &gt;になってしまっているようです。

XmlWriter関数ではCDATAを扱えそうなものがありましたが、
ドキュメント不足で今のところ理解できていません。
SimpleXML関数で、CDATAセクションを出力することは不可能なのでしょうか?
0522nobodyさん2006/12/31(日) 18:43:15ID:???
>>518-520
自演乙

>>521
ぐぐったら最初に出てきた
http://changelog.ca/log/2005/06/14/php-simplexml-cdata-problem--and-my-solution

> The one big problem is, SimpleXML does not handle CDATA!
05235212006/12/31(日) 19:04:53ID:???
>>522
ありがとうございます。
どうもサポートしていないようですね。
参考にさせていただいたサイトでは、スクリプトが複雑だったので、
自分で置き換え用のスクリプトを書いて対応することにします。
0524nobodyさん2006/12/31(日) 20:23:20ID:Dpv/dM4g
携帯用サイトをEUC-JPで作ってしまいました。
(PHP+MySQL)
ある程度作ってしまってから、EUC-JPが全ての携帯に対応していないことを知り、
Shift-JISに変更したいのですが、これは一から作り直すしかないのでしょうか?
0525nobodyさん2006/12/31(日) 21:38:58ID:b7fBDglP
質問です。
echo mb_detect_encoding( file( $uri ) );というように、
URIの文字コードを判断しようとすると正常に判定してくれません。
逆リンクしてきたページのタイトルを取得しようとしているのですが、
決め打ちで変換しても正常に判定してくれません。
回避する方法はありますか?
メタタグから判断した方が確実ですか?

>>524
出力の時にエンコードしては?
0526nobodyさん2007/01/01(月) 00:29:02ID:n0VP9emO
>>524
出力だけSJISにする。
ただし、フォームがあれば、そこから送った値はSJISなのでEUC-JPに変換する必要がある。
0527 【ぴょん吉】 【1402円】 2007/01/01(月) 00:31:09ID:???
>>524
一からってのがよくわかんないけど
FTPでアップするときに変換してもいいしフリーソフトで変換してもよい。

みんなあけおめ
0528 【大吉】 【950円】 2007/01/01(月) 01:03:15ID:???
あけおめ
0529 【だん吉】 【941円】 2007/01/01(月) 02:37:50ID:???
あけお
05305242007/01/01(月) 07:53:05ID:fMPusSJi
あけましておめでとうございます。
Dreamweaverを使っていて、
・[プロパティ]⇒[エンコーディング]でSJISに変えると文字化け。
・なので、日本語の部分は打ち直す

この方法以外に簡単にエンコードする方法はないのでしょうか。

>>525
出力の文字コード指定をしたのですが、
mb_http_output('SJIS');
としても、変化はないです。

>>526
フォームはあります。
ですが、今はそれ以前の問題のようです。

>>527
文字化けせずに変換する方法はないものでしょうか・・・。
05315242007/01/01(月) 09:25:46ID:fMPusSJi
・全てShift-JISにエンコードして、文字化けを修正
上記で解決しました。
データベースはphpMyAdminを使っているので、
Shift-JISで観覧可能です。
0532nobodyさん2007/01/01(月) 10:59:07ID:???
Shift_JIS環境でMySQLの場合、mysql_real_escape_stringが
正常に動作しないらしいよ。
誰か「mb_mysql_real_escape_string」を作ってよ
0533nobodyさん2007/01/01(月) 11:00:00ID:???
後、EUC-JPだけど、Shift_JISはアンダーバーだよ。
0534nobodyさん2007/01/01(月) 11:06:22ID:???
MySQL使ってるって事はユーザーの投稿扱ってるな。
その場合、文字コードを途中で変えると、絵文字化けるよ。
俺はここら辺で1週間悩んだから頑張れw

ドコモ絵文字はバイナリデータ。
AU絵文字はHTMLに書き込む場合は<img localsrc="番号">で出力できるけど
フォームからはSJISの文字として送られてくる。
かなり面倒。

俺はエスケープじゃなくてstr_replaceで完全に¥や;や=とかを消してしまって
絵文字をそのまま扱えるようにバイナリデータとしてMySQLに保存してるが
もっとスマートなやり方がきっとあるから、見つけたら教えてくれ。
0535nobodyさん2007/01/01(月) 11:28:38ID:???
>>534
すみません

>MySQL使ってるって事はユーザーの投稿扱ってるな。
の意味が判りません。教えてください。
0536nobodyさん2007/01/01(月) 11:36:47ID:???
MySQLのデータの中身は完全自前で容易されたデータなのかな?

例えばMySQLでSNS的なものや掲示板やランキング的なものを作ってたりしてたら
登録されるユーザー名とかサイト名とか投稿文に
勝手に携帯の絵文字がバンバン入ってくるんです。

それをMySQLに保存したりする用途じゃなければ大丈夫です。
それ以外の用途があんまり思いつかんかった。
通販とかに使ってMySQLの中にはいるデータが
全部こっちで用意したものなら気にする必要は無いです。
0537nobodyさん2007/01/01(月) 11:40:49ID:???
後、着メロとかのデータベースでも関係ないですね。
ちょっと視野が狭くなってたかも…。
0538nobodyさん2007/01/01(月) 11:46:40ID:???
変な質問で申し訳ないのですが、

return true;
とか
return false;
ってどういう意味なんでしょうか?
0539nobodyさん2007/01/01(月) 11:53:27ID:???
自分で関数作る時、真と偽の結果を出力する。
ユーザー定義関数かfunctionで調べて使い方覚えた方が良いよ。
それが扱えないと全く話にならないです。

それ覚えたら次はCLASS覚える→Pear覚えるってやってくと
短時間で大きい物作れるようになる。
0540nobodyさん2007/01/01(月) 12:03:39ID:???
>>538
マニュアル嫁

return
http://jp.php.net/manual/ja/function.return.php
論理型 (boolean)
http://jp.php.net/manual/ja/language.types.boolean.php

(動作が分からない時は短く単純化して、CLI版で試しに実行してみるのも良い方法だ。)
function true(){return true;};
function false(){return false;};

var_dump(true());
var_dump(false());
0541nobodyさん2007/01/01(月) 12:41:49ID:???
マジッククオートをオンにしているのは、
SQLインジェクションの対策だけなのでしょうか?
DBを使わないプログラムの場合は、
\'"が入力に入っててもエスケープしなくて大丈夫でしょうか?
0542nobodyさん2007/01/01(月) 13:09:40ID:???
>>541
おk
0543nobodyさん2007/01/01(月) 13:48:43ID:RgWEDbNk
すいません初心者なので
ホントにくだらない
質問です。
他人の書き込みに対して
返答する
たとえば>>100とかって
どうやってやるんですか?
0544nobodyさん2007/01/01(月) 14:03:25ID:???
>>543

if( ">>"のあとが数値だったら ){
  $str = "<a href=\"#"+数値+"\">>>数値</a>";
}
0545nobodyさん2007/01/01(月) 14:03:57ID:???
if( ">>"のあとが数値だったら ){
  $str = "<a href=\"#"+数値+"\">&gt;&gt;数値</a>";
}
0546nobodyさん2007/01/01(月) 14:32:16ID:???
ブラウザのネットゲームを作っているのですが、
チャットは一人一人にログ作ったほうがいいですよね
今はDBで全てのチャットを管理しているのですが・・・。
やはりそれだと負担がすごくなりそうです。
新しくDBを作成してアカウントごとにテーブルを分けるのも考えてみたのですが、
さすがにひとつのゲームで2つもDBを使う気にはなれません・・・。
開発経験がおありの方、ご指導お願い致します。
0547nobodyさん2007/01/01(月) 14:39:57ID:???
DB作成する必要あるの?テーブル増やすのじゃだめなの?
それに新しくDB作ったとしても何か問題あるの?
0548nobodyさん2007/01/01(月) 14:58:57ID:???
>>547
一人ひとりに各チャットログがある場合は
一つのテーブルで処理すると莫大な行になってしまう

最初にデータベース名を変数に格納して、
SQL実行をfunctionでmysql_db_selectと実行するのをまとめてしまったので・・・。
あー、でもチャットのみならDB作ってしまってもいいかもしれない・・・
テーブルが存在するか調べる関数ってPHPにあったっけ・・・?
これはまたMySQLスレのがいいのかな
0549nobodyさん2007/01/01(月) 15:28:21ID:???
莫大な行になって何か問題あるの?
0550nobodyさん2007/01/01(月) 15:31:22ID:???
検索のときに遅くなったりするのでは?
0551nobodyさん2007/01/01(月) 15:34:02ID:???
そもそもゲームのチャットログなんて大事に保管する必要ない気がするんだが。
0552nobodyさん2007/01/01(月) 15:36:55ID:???
>>511
だから、各id.cgiに各30行ほど入れておけばいいかなーと思った
0553nobodyさん2007/01/01(月) 15:40:27ID:pMMaY4YI
掲示板とかのログなんですけど、
普通は書き込み内容はそのままログに書き込んで、
表示の時にエスケープ処理とかするようですが、
書き込みの時点でエスケープ処理をして、処理済みのを書き込み、
表示は処理済のログをそのまま出すっていう手法はまずいでしょうか?

表示する内容としては同じものになるとは思うんですけど、
ログに書き込む内容が異なりますよね?
後者はユーザーが投稿した生のデータを改竄してログに書き込んでる気がするので、
前者のほうが支持されるのでしょうか?
それともセキュリティー的に何か問題とかあるのでしょうか?
0554nobodyさん2007/01/01(月) 15:48:33ID:???
MySQLで検索遅くて使えない位の会員がいる奴の質問とは思えないな…
もし遅いならゲームでのテーブルの使い方に問題ありそう。
IDに関連付けてテーブルをちゃんと分けてないで
色々ぶっこんで毎回全部読み込んでるとか、インデックスつけてないとか。
0555nobodyさん2007/01/01(月) 16:08:34ID:???
>>550
ほんとに?
0556nobodyさん2007/01/01(月) 16:08:55ID:???
>>553
> 書き込みの時点でエスケープ処理をして、処理済みのを書き込み、
> 表示は処理済のログをそのまま出すっていう手法はまずいでしょうか?

非常にまずいです。
どうしてもそうせざるを得ない状況、例えば、極限まで最適化した処理をする都合上、
エスケープ処理にかかる負荷を減らしたい、などではない限りやるべきではありません。

理由としては、
・エスケープ漏れになりやすい。(例えば、新たにメールでの投稿を受け付けた場合など。)
・場合によってはエスケープ解除が必要になって面倒。(例えば、投稿内容のメール通知や、記事のダウンロード機能をつけた場合。)
・記事編集機能のロジックを組むのが面倒になる。

など。
0557nobodyさん2007/01/01(月) 16:11:32ID:???
>>553
SQLサーバーにそのまま渡して良いのは、プロトコルレベルで
プリペアードステートメントが使えるときだけ。

SQL文に書き込み文をそのまま挟んで発行するのはありえない。

最初に意図しない奴は全部弾いて終了させるかユーザーに書き直させる。
掲示板の本文欄みたいにある程度記号使わせる場合は
変換して突っ込む以外ないよ。
エスケープはマルチバイトの環境でちょっとバグが出てる。

多分、どっかのブログ読んでそう思ったのかもしれないけど
今それを読んで何か考えるには早い。危ない。
0558nobodyさん2007/01/01(月) 16:19:37ID:???
膨大な行がいやならユーザーごとにテーブル作ればいい。
なぜデータベースを作るのか。
0559nobodyさん2007/01/01(月) 16:29:08ID:0qkB5k7p
phpで掲示板を作りたいのですが、
ファイルの文字コードはshift_jsを選ぶべきでしょうか?
クライアントからの入力があるサイトではシフトJSが多い気もするので気になります。
05605532007/01/01(月) 16:35:26ID:pMMaY4YI
>>556-557
どうもありがとうございます。
書き込む文字列を成形するときに、
エスケープ処理してしまう関数を使っているので、
>>556さんのおっしゃる
>・場合によってはエスケープ解除が必要になって面倒。
というのは痛感していました。

今作ってるのは、ちょっとした機能をPHP側でつけている、
Ajaxチャットを目指しているのですが、(DBは使用していません)
JavaScriptはさっぱりなので、参考サイトを色々まわってるのですが、
JavaScriptのXMLHttpRequestを使ってログを取得して表示することになると思います。
その場合、エスケープ処理はJavaScriptでやることになると思うのですが、
それでも安全性に問題はないですか?

スレ違いですかね・・・
0561nobodyさん2007/01/01(月) 16:38:17ID:???
>>559
utfだとサイズがちょっとでかくなるってだけで、
別になんでもいいよ。あとjsじゃなくてjisね。(Shift_JIS)
05625562007/01/01(月) 16:40:19ID:???
>>560
「出力」の状態でエスケープされていない文字列を送信するのは危険ですので、
出力時にエスケープをして、その出力はサーバサイドプログラムで動的に行うことになります。
負荷の問題でそれができない場合には、入力時にエスケープすべきですね。

JavaScriptから読み取ることを想定したファイルであっても、当該URLを直リンクで指定されたら、XSSできちゃうわけで・・・。
Refererで参照元URIをチャットページに制限しても、チャット内でURL貼られた場合の処理とか、Referer 詐称している人が保護できなくなるとかいろいろ面倒なので。
0563nobodyさん2007/01/01(月) 16:51:23ID:???
メールで添付ファイルを送信する場合、
普通、一旦一時ファイルとしてアップしたファイル($_FILE)を
コピーして一時ファイルじゃなくする必要ってあるものでしょうか?

一時ファイルでやってみたのですがうまくいきませんでした。
他人のソース見てみると一旦コピーして、それから
手動で削除しているようなんですよね・・・
例: ttp://php.s3.to/net/#mail
0564nobodyさん2007/01/01(月) 16:58:56ID:???
>>562
どうもご丁寧にありがとうございます。
XSS対策も含め、まだ理解しきれてないことが多いので、
設計を見直しつつ、セキュリティの勉強もしてまいります。
05655602007/01/01(月) 16:59:44ID:pMMaY4YI
すみませんsageてました。
0566nobodyさん2007/01/01(月) 17:36:28ID:???
暇だから作った関数でも

function rand_parsent($var,$min_par,$max_par){

$min_var = $var * $min_par;
$max_var = $var * $max_par;
$var = round(rand($min_var,$max_var) / 100);
return $var;
}


rand_parsent(基準数値,最小値%,最大値%)

ネトゲの武器ダメージ算出などにでも使ってくだしあ。

echo rand_parsent(100,80,120);
『80〜120の数値をランダムで表示』
0567nobodyさん2007/01/01(月) 17:43:12ID:6lGuu3mG
>>559
配布する目的ならsjisじゃないと、サポートに文字化けと騒ぐ小僧が後を絶たなくなる
自分で使うのみならeucが良いかと
blogとか何らかのutf-8を想定し配布するならutf-8ですっと何度も書き
言い聞かせないと文字化け小僧が出現してウザイです
sjisはメタ文字とか色々と潰す処理が面倒ですけどね
0568nobodyさん2007/01/01(月) 20:25:00ID:PQGIOQJU
<a href="device:gpsone?url=?http://sample.url&ver=1&datum=0&unit=0&acry=0&n...?
上記より取得した位置情報をGETではなくPOSTで取得することは可能でしょうか?

ユーザーに故意に位置情報を書き換えられないようにしたいのです。
POSTじゃなくても、何か方法があれば教えていただけると幸いです。
0569 【大吉】 2007/01/01(月) 20:32:18ID:???
ヒント:post打ってセッションに閉じ込めろ
0570nobodyさん2007/01/01(月) 21:00:28ID:PQGIOQJU
>>569
POSTで受け取ることができます?
POSTでリクエスト送信してもGETで返ってき、
一部POSTで返ってくれたりでもしたら嬉しいのですが。
(現在外出中なので、帰宅してから調べてみたいです)
セッションは考えましたが、途中でユーザーにダイレクトでURL入力されると
意味のないことかなーと思いました。
0571nobodyさん2007/01/01(月) 21:21:14ID:???
GETで返る、って意味が分からん。
GET・POSTというのは、どういう形式で鯖にリクエストを投げるか、を示す。
0572nobodyさん2007/01/01(月) 21:28:49ID:???
<form action="device:gpsone" method="post">
<input type="url" value="http://www.example.com/";>
<input type="submit" value="動作するかしらねーぞ">
</form>
0573nobodyさん2007/01/01(月) 21:37:00ID:PQGIOQJU
POSTではできないようなことをブログで見ました
(自分ではまだ試していませんが、帰ったら試してみます)
POSTできないと、URLをダイレクトに書き換えられて人生終わります
0574 【豚】 出ました2007/01/01(月) 21:56:14ID:???
getで受け取った値をセッションに保存。
値が書き換えられてたら処理中断。
発想をかえてみれ。これじゃだめか?
0575nobodyさん2007/01/01(月) 22:00:34ID:???
postでも好きな値送れるじゃん
05765122007/01/01(月) 22:13:21ID:sSR0Omy3
>>515
レス遅くなりましたが、ありがとうございました。
0577nobodyさん2007/01/01(月) 23:10:49ID:???
>>574
別ページから直接URLを打たれた場合対処できないかと

>>575
送信⇒中間⇒返答
だから、POSTで何もできなす・・・
0578nobodyさん2007/01/01(月) 23:15:14ID:???
WEBである以上嘘ついてるかどうかは確認できないって事だよね
0579nobodyさん2007/01/01(月) 23:20:24ID:???
どういう状況なのかようわからん
0580 【凶】 出ました2007/01/01(月) 23:21:43ID:???
>>577
だから別ページから直接URL打たれてもセッションにキーなども一緒に保存しといて
比較して不正なら中断すればいいだろ。
0581nobodyさん2007/01/01(月) 23:26:55ID:???
>>579
移動した距離分ポイントを増やすようなシステムだけど、
URLで座標が書き換えられるような不正を防止したい

>>580
別ページにフラグ立てておいて
次のページにすればフラグを消す?
すまんがサッパリ理解できない
0582nobodyさん2007/01/01(月) 23:53:53ID:???
AUの携帯からフォームでGPS情報を送らせるわけでしょ。
なんかセットでこちらで用意した暗号データみたいのを一緒に送るとか・・
0583nobodyさん2007/01/01(月) 23:53:59ID:???
>>581
とりあえずあれだ、落ち着け。
そして セッション の意味を調べてこい。
0584 【小吉】 !omikuji2007/01/01(月) 23:58:56ID:???
あけおめ!

>>464だけど
現在の閲覧者カウントするのはセッション使うでおk?
0585nobodyさん2007/01/02(火) 00:13:42ID:???
http://example.com/hogehoge/test/abc.php/12345/
これの
12345
の部分のみ取得したいのですが、どうすれば良いですか?
また、URL名が
http://example.com/hogehoge/abc.php/12345/
になったりしても、
abc.phpの次にある12345を取得したいです。
何か良い方法はないのでしょうか
0586nobodyさん2007/01/02(火) 00:25:03ID:???
初歩の知識がたりなさすぎる。
入門書ぐらいのことは一通り学習しなさい。
話はそれからだ。
0587nobodyさん2007/01/02(火) 00:27:29ID:???
>>584
ログに記録して近時のアクセス者数を表示。

>>585
正規表現でも使え。
0588nobodyさん2007/01/02(火) 00:48:14ID:fMlbvj4z
くだらない質問すみません
phpのコードを書くときにどのようにスペースを開けて書くのが普通なのでしょうか?
たとえば$hogeが存在したら$hogeにaaaをセットするとしたら
if(isset($hoge) ){
 $hoge = 'aaa';   //タブは全角にしてあります。
}
こんな感じでいいのでしょうか?
自分ではこれで見やすいと思うのですが、
みなさんはどんな感じに書いていますか?
■ このスレッドは過去ログ倉庫に格納されています