ヘルスケア製品の Web サイト http://www.bjp51.net を作成しましたが、過去 2 日間でいくつかの問題が発生しました。360 でスキャンしたところ、リスクが高く、わずか 49 ポイントであることがわかりました。
最初の問題は非常に深刻な問題です。今日は最初の問題を解決したいと思います。
360 から寄せられた意見を見てみましょう
変更方法がわかりません。解決するのを手伝っていただければ幸いです。
これはcontrast.php
<body><?php$id='';if(!empty($_POST['id'])){ for($i=0; $i<count($_POST['id']);$i++){ $id=$id.($_POST['id'][$i].','); } $id=substr($id,0,strlen($id)-1);//去除最后面的","}if ($id==''){echo "<script lanage='javascript'>alert('操作失败!至少要选中一条信息。');window.opener=null;window.open('','_self');window.close()</script>";exit;} $tdwidth=floor(90/$i);//取整,左边占10%$sql="select * from zzcms_main where id in ($id)" ;$rs=mysql_query($sql);?><table width="100%" height="218" border="0" align="center" cellpadding="5" cellspacing="1" class="bgcolor3"> <tr> <td width="10%" align="center" bgcolor="#FFFFFF">【产品图片】 </td> <?php while ($row=mysql_fetch_array($rs)){?> <td bgcolor="#FFFFFF" style="font-weight:bold" width="<?php echo $tdwidth ?>%"><a href="<?php echo $row["img"]?>" target="_blank"><img <?php echo getsmallimg($row["img"],"")?> alt="<?php echo $row["proname"]?>" border="0" ></a></td> <?php } ?> </tr> <tr class="bgcolor1"> <td width="100" align="center">【产品名称】 </td> <?php mysql_data_seek($rs,0); while ($row=mysql_fetch_array($rs)){?> <td style="font-weight:bold"><?php echo $row["proname"]?></td> <?php } ?> </tr> <tr> <td width="100" align="center" bgcolor="#FFFFFF">【主要功能】</td> <?php mysql_data_seek($rs,0); while ($row=mysql_fetch_array($rs)){?> <td valign="top" bgcolor="#FFFFFF" ><?php echo $row["prouse"]?></td> <?php } ?> </tr> <tr class="bgcolor1"> <td width="100" align="center">【规格包装】</td> <?php mysql_data_seek($rs,0); while ($row=mysql_fetch_array($rs)){?> <td><?php echo $row["gg"]?></td> <?php } ?> </tr> <tr class="bgcolor1"> <td width="100" align="center"><strong>招商区域</strong></td> <?php mysql_data_seek($rs,0); while ($row=mysql_fetch_array($rs)){?> <td><?php echo $row["city"]?></td> <?php } ?> </tr> <tr> <td width="100" align="center" bgcolor="#FFFFFF"><strong>产品说明</strong></td> <?php mysql_data_seek($rs,0); while ($row=mysql_fetch_array($rs)){?> <td valign="top" bgcolor="#FFFFFF"><?php echo nl2br($row["sm"])?></td> <?php } ?> </tr> <tr class="bgcolor1"> <td width="100" align="center"><strong>可提供的支持</strong></td> <?php mysql_data_seek($rs,0); while ($row=mysql_fetch_array($rs)){?> <td valign="top"><?php echo nl2br($row["zc"])?></td> <?php } ?> </tr> <tr> <td width="100" align="center" bgcolor="#FFFFFF"><strong>对代理商的要求</strong></td> <?php mysql_data_seek($rs,0); while ($row=mysql_fetch_array($rs)){?> <td valign="top" bgcolor="#FFFFFF"><?php echo nl2br($row["yq"])?></td> <?php } ?> </tr> <tr class="bgcolor1"> <td width="100" align="center"><strong>备注</strong></td> <?php mysql_data_seek($rs,0); while ($row=mysql_fetch_array($rs)){?> <td><?php echo nl2br($row["other"])?></td> <?php } ?> </tr></table><table width="100%" height="60" border="0" cellpadding="0" cellspacing="0"> <tr> <td align="center"><input type="button" name="Submit" value="关闭本窗口" onClick="javascript:window.close()"></td> </tr></table><?phpmysql_close($conn);?></body>
$id=''
if(!empty($_POST['id']) ){
for($i=0; $i
}
$id=substr($id,0,strlen($id)-1);//最後の「,」を削除します
}
$sql="select * from zzcms_main where id in ( $id ) "
彼は、受信データを SQL コマンドでチェックせずに使用したと考えています
$id='';
if(!empty($_POST['id'])){
for($i =0; $i
}
$ id=substr ($id,0,strlen($id)-1);//最後の「,」を削除します
}
$sql="select * from zzcms_main where id in ($id)"
彼は、あなたが受信したものを使用したと考えていますSQL コマンドのデータをチェックせずに
また、確認しないと注射されやすいのでしょうか?
$id = $id . (intval($_POST['id'][$i]) . ',');
SQL インジェクションの原則は、アドレス バーまたはフォームから挿入することです
アドレス バーから $_GET["a"] を取得し、フィルタリングせずにプログラムに直接使用すると、脅威です。例:
$_GET["a"]=1; の場合:
$sql = "SELECT * FROM AA WHERE id =$_GET["a"]"; id = 1";
しかし、他の人がアドレスバーを通じてそれを自分で変更し、$_GET["a"] の値を 1 または (および) XXX のさまざまなコードに変更すると、クエリステートメントは
$sql = "SELECT * FROM AA WHERE id =1 or (and) xxx";
それで私は騙されました。
したがって、アドレス バーとフォームから取得したパラメーターは、書式設定、フィルター処理、制限される種類、長さ、文字の指定を行う必要があります...
$sql="select * from zzcms_main where id in ($id )" ;
$id パラメータは有効です。これを使用して何でも入力でき、自然に挿入されます。
?id は文字のみであるため、intval を使用して文字に変換できます。???0 でない場合、文字は挿入できません。
セキュリティ レベル: 高リスク
セキュリティ レベルは、国内の Web サイトの 46% を上回ります。
$id=$id.(intval($_POST['id'][$i]).',');
受信データは一重引用符を 2 つの連続する一重引用符に置き換えます。sql 一重引用符を追加します。渡されたパラメータをステートメントで使用する場合。
$id = str_replace("'","''",$_POST['id']);
$sql = " select * from tb_user where id='$id' ";注射。
現在、 $id=$id.($_POST['id'][$i].',') を $id = $id . ['id'][$i]) . ','
そうです
if(!empty($_POST['id'])){
for($ i=0; $i
}
$id=substr($id,0,strlen($id)-1);/ /最後の "," を削除します
}
そうですか?
if(!empty($_POST['id'])) { $id = join(',', array_map('intval', $_POST['id']));}
if(!empty($_POST['id'])) { $id = join(',', array_map('intval', $_POST['id']));}
php に詳しくないので、このコード スニペットを使用します。変数を探す必要はありません
モデレータの無私の精神に感謝します