私はローカルウェブサーバとして使用OpenWrtのルータを持っていると私は私の3GモデムにUSSDをダイヤルするWebページを作成し、スクリプトは次のようになります。ローカルWebページでシェルスクリプトの挿入を防ぐには?
<html>
<title>CHECK USSD</title>
<body>
<?php
if($_POST['send']){
$ussd=$_POST['ussd'];
exec('ussd.py '.$ussd,$out);
echo "Result: ".$out[0];
}
?>
<form action="" method="post">
USSD :<input type="text" autofocus name="ussd" size="14" value="">
<input name="send" type="submit" value="Send Ussd">
</form>
</body>
</html>
ussd.py
は、私がチェックするために使用するPythonスクリプトですUSSD。問題は、ユーザが$(echo "hacked" > /www/index.html)
または$(rm -fr /root/*)
のような入力ボックスに何らかの種類のスクリプトを入力しようとすると、それらのスクリプトも実行されることです。だから、人々は簡単に私のルータをハックすることができます。それをどうやって防ぐことができますか?
http://php.net/manual/en/function.escapeshellarg.php – Devon
ユーザ入力を 'exec'にパイプする前に徹底的に検証する必要があります。正規表現を使用します。近い定義に一致しないものは、入力として受け入れるものを即座に破棄する必要があります。 –
@FranzGleichmann合意し、単に 'escapeshellarg'を使って、あなたが完了したと思っても十分安全ではありません。 – Pete