2017-10-11 15 views
0

どのようにすればmysql -sN -e "query;"のようなコマンドを埋め込むことができますか?私のシェルがデータベース接続を行うシェルになるように、perlスクリプトの中に置いてください。クエリはコマンドラインから完全に実行される少し複雑なクエリですが、私がperlプログラムで設定したとき、 "演算子が期待される文字列が見つかりました"、 "演算子が期待される場所にbarewordが見つかりました"、構文エラー。 Perlにデータベースへのアクセスを与えずにこれをどうやって行うのですか?perlプログラムにシェルコマンドを埋め込む

+0

できません。 [DBI](http://search.cpan.org/~timb/DBI-1.637/DBI.pm)を使用する必要があります – mkHun

+0

あなたのPerlコードを投稿できますか? –

+4

バックスティックでmysqlクライアントを呼び出すことによって、シェルインジェクションとSQLインジェクションの両方の脆弱性を公開するのではなく、関連するコードをそのコードの修正に関するガイダンスを参照して投稿してください。 "オペレーターが期待した場所に裸の単語が見つかりました"というエラー。 PerlのDBIモジュールとDBD :: mysqlを組み合わせることで、プレースホルダ/バインド値を含むより良い解決策が提供され、ハッキーなmysql cli呼び出しが回避されます。 – DavidO

答えて

1

バッククォートを使用することができます。以下の例では、OSのls -lコマンドの出力がコンテンツに配置されます。あなたがしていることのリスクを知っていると仮定します。

#!/usr/bin/perl 

use strict; 

my $content=`ls -l`; 
print $content; 
+0

完璧に動作します。みんなありがとう。 –

関連する問題