2015-03-13 77 views
-2

我使用mysqli,我試過phpPDO,laravel,fluentPDO但我的問題總是更新。PHP查詢生成器安全更新

我有一個不能被侵犯,在某些表某些用戶不允許更新一些領域,我認爲mysqli的不夠好,但問題是強大的安全規則..

如何強制對象通過ajax json傳遞只更新一些預定義的字段?我的意思是在服務器端(PHP)

你有任何其他建議嗎?...

我真的不喜歡與mysqli的工作,但我看不出如何使用任何來處理這個問題此查詢生成器......這是痛苦的,因爲我的查詢變長了,我對我自己的工作對SQL注入

+0

使用白名單?不確定你在問什麼。 – jeroen 2015-03-13 18:21:04

+0

根據登錄用戶驗證傳入數據。 – ceejayoz 2015-03-13 20:21:34

回答

1

在像Laravel這樣的框架中,查看ORM中的mass assignment限制。您可以限制哪些字段可以編輯。您也可以在更新模型之前對其進行過濾。

有白名單和黑名單選項。來自文檔的示例:

class User extends Model { 
    protected $fillable = ['first_name', 'last_name', 'email']; 
} 

這不是查詢生成器問題。這是您在查詢生成之前很久才解決的問題。

+0

非常有趣 – Marco 2015-03-13 20:35:22

-1

在PHP端,有一個白名單,如:

if(!in_array($_POST['field'],array(
'every','field','this','user','is','allowed','to','edit' 
))){ 
die("you do not have access to modify field ".htmlentities($_POST['field'],ENT_SUBSTITUTE)); 
} 
$st=$db->prepare("UPDATE table SET ".$_POST['field']." = ?"); 
$st->execute(array($_POST['newData'])); 

和js方:

var xhr=new XMLHttpRequest(); 
xhr.open("POST","?"); 
var fd=new FormData(); 
fd.set("newData","foobar"); 
fd.set("field","allowed"); 
xhr.send(fd);//no problem! "allowed" is in the whitelist! 
fd.set("field","password"); 
xhr.send(fd);//error! you do not have access to modify field "password"! 
+0

@PeeHaa這到底如何與xss有關?而且這個代碼應該在用戶通過身份驗證後運行......「我如何強制ajax json傳遞的對象只更新一些預先定義的字段?」,白名單會做到這一點 – hanshenrik 2015-03-13 22:12:57

+0

我沒有告訴他如何插入數據(儘管準備好的語句或mysqli_real_escape_string),但是如何確保用戶被允許編輯該字段:p也與白名單,他不需要轉義字段名稱..其始終有效或阻止白名單檢查 – hanshenrik 2015-03-13 22:18:42