簡體   English   中英

如何避免“PHP注入”

[英]How to avoid “PHP injection”

我有這個腳本

<?php $number = %value%; ?>

%value%標記將被用戶輸入的DB上的值替換。

我擔心的是有人輸入的內容如下:

1; echo phpinfo()

替換的結果將是:

<?php $number = 1; echo phpinfo(); ?>

這顯然是一種安全風險。

是否有一個函數來逃避php腳本字符或我可以使用的東西?

提前致謝。

上下文

這是我正在研究的CMS上的工具,通常工具生成添加到某些PHP文件的HTML代碼。

在這種情況下,此工具從RSS通道生成HTML結構。 我們要求用戶輸入RSS URL和要顯示的提要數量,我們將這些值替換為PHP腳本並使用它們來獲取提要並以HTML結構顯示它們。

像這樣:

<?php
  $url = "URL"; //comes from DB
  $number = N; //comes from DB
  $feeds = getFeeds($url, $number);
  ...
?>

你上面描述的機制是有缺陷的。 PHP就是這樣不行。 不會執行任何用戶輸入(或更准確地說,由PHP解釋),除非:

  • 您通過eval()調用運行它
  • 您將代碼和用戶輸入的組合保存為PHP文件,然后執行它

你應該擔心的是SQL注入,這是一個非常不同的東西。

如果你指的是一個類似於子彈#2的場景,你很可能從設計角度做一些非常錯誤的事情,你應該重新思考你的方法。

正如code_burgar所提到的......這種設計是完全有缺陷的。 應該沒有理由動態構建服務器執行的文件。 您應該從db中提取記錄集,循環遍歷它並為每條記錄執行getFeeds()函數。 這樣做不會執行任何db提供的數據,除非..再次作為cod_burgar說..你使用eval()函數。

通常,您希望在任何程序中清理所有用戶提供的輸入。 EG:如果要求一個5位數字,在將數據分配給變量之前,確認它實際上是一個整數,並確保它只有5位數。

鏈接到清理PHP輸入

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM