私はhtmlテーブルにカメラ名のリストを持っています。必要に応じて、編集ボタンを押してカメラ名を編集することができます。特殊文字がありません
これで、カメラ名を編集できるようになりました(これ以外にも多数のオプションがあります)。
var edit = function(t, to, cameratype, cameraname, ...)
{
var mydiv = js("#editform");
if (mydiv.find("form").length) {
mydiv.show();
} else {
// fields
var $myform = js("<form id='EditCameraForm' name='' method='post' action='" + to + "'></form>");
var $myfieldset = js("<fieldset><legend>Edit camera settings</legend></fieldset>");
var $myinput = js("<input type='hidden' name='camera_type' value='" + cameratype + "' />");
var $mylabel = js("<label for='CameraName'>Camera name: </label>");
var $myinput2 = js("<input id='CameraName' name='camera_name' size='25' value='" + cameraname + "' />");
$myform.append($myinput, $mylabel, $myinput2, ...);
}
私の問題はカメラマンになります。私は特殊文字を許可します。カメラJoe's camera
に電話することができます。
編集ボタンを押すと、カメラ名はJoe
と表示されます。
これはカメラ名が最初に作成されたときにPHPで私の検証機能に関係しています...私は信じている:
function check_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = mb_convert_encoding($data, 'UTF-8', 'UTF-8');
$data = htmlentities($data, ENT_QUOTES, 'UTF-8');
return $data;
}
cameranameは、ボタンのクリックを経由して渡されます。
<button id="editbutton" onClick='edit(this, "<?php echo htmlentities($_SERVER['REQUEST_URI']); ?>", "<?php echo $result_cameras[$i]["camera_type"]; ?>", "<?php echo $result_cameras[$i]["camera_name"]; ?>", ...)'>Edit</button>
このページのソースを表示すると、Joe's camera
と表示されます。だから、おそらく私はdecodeURIComponent(カメラマン)とJSコードでこれをデコードする必要があると思ったが、それは動作しません。助けてくれてありがとう!
あなたの質問に答えることはできませんが、検証機能を捨てれば、データが破壊されますが、SQLインジェクションに対して十分な保護を提供することはできません。 –
投げ捨てる? XSS(@JMack修正)を防ぐためのこの一般的なテクニックは、mysql_real_escape_stringのようなSQL用のmysql関数を使用していますか? – Tom
関数内の呼び出しは有用ではないようです。逆に、 'stripslashes()'呼び出しはデータを破壊することさえあります。 'htmlspecialchars()'はXSS(全てのエンティティを変換する必要はありません)を防ぐのに必要な唯一のものです。データを出力するときにそれを適用すれば十分です。mysql_queryのデータを使用する場合は 'mysql_real_escape_string () 'を返します。 –