¿Se puede hacer segura la exposición personal de todos modos?

Sé que exponer personal sobre rpc es vulnerable. Pero, ¿hay alguna forma en que pueda hacer que la exposición personal sobre rpc sea segura?
Permítanme exponer mi requisito. He implementado una criptomoneda. Ahora quiero exponer sus funciones como api.
Pero para eso tengo que exponer personal sobre rpc para realizar transacciones. Por ej. para realizar transfer, puedo escribir el siguiente código:

function transferCoin(to, amount,frm, passphrase){
    web3.personal.unlockAccount(frm,passphrase);
    var tx=contract1.transfer(to, amount, {from: frm});
}

Problema:
Pero si alguien puede conectarse a mi nodo, puede hacer un mal uso personal y vaciar mi cuenta.
Editar:
mientras escribía la pregunta, me di cuenta de que no se trata solo de personal, sino de rpc que es inseguro. Por ejemplo, consideremos un caso en el que el personal no está expuesto sobre rpc. Pero, si alguien puede conectarse a mi nodo a través de rpc, puede ejecutar una función como:

function EtherTransfer(){
    while(true){
        //console.log("hello");
        web3.eth.sendTransaction({from:"addr1", to:"addr2", value: web3.toWei(100,"ether")});
    }
};

y llevar todos mis éteres.
Entonces, ¿hay alguna solución al problema? Como indiqué en mi requisito, necesito exponer personal sobre rpc para proporcionar funciones de API de mi contrato a mi otra aplicación.

configure un proxy para manejar todas las solicitudes de su nodo local. si está en nodejs, use github.com/nodejitsu/node-http-proxy
Necesita construir algún middleware. Estos son requisitos muy específicos y web3 no los admite. Debe crear su propia API que realice su propia validación y autenticación de transacciones, y luego puede usar IPC para enviar transacciones a su nodo de forma segura.
¿Quieres decir que tengo que codificar algo como web3? Puedo usar web3 para realizar todas las tareas que necesito, pero quiero saber cómo puedo hacerlo más seguro.
Además... la pregunta plantea un segundo escenario de que RPC no es seguro (con o sin Personal). ¿Qué hay de eso? ¿Hago otra pregunta para el segundo caso?

Respuestas (1)

Antes de enviar Transacción, debe ejecutar unlockAccount con su frase de contraseña, por lo que la vulnerabilidad se debe principalmente a su frase de contraseña débil, no demasiado con la interfaz expuesta.

Presumiblemente, si la cuenta de Prashant necesita tener Ether, a veces necesita desbloquear esa cuenta para hacer lo que sea que necesite acceder a ellos, por lo que una contraseña segura no será suficiente.
Puede usar signAndSendTransaction (renombrado recientemente) que generalmente no desbloqueará su cuenta; consulte ethereum.stackexchange.com/questions/7196/… .
@BookyPoohBah ¿Cómo puedo usar personal.sendTransaction cuando tengo que enviar transacciones a través de RPC? No hay una función como web3.personal.sendTransaction(). Esta función solo funciona desde la consola geth.
@PrashantPrabhakarSingh Tiene razón en que no está incluido en la versión actual de geth. Está documentado para JSON-RPC en github.com/ethereum/go-ethereum/wiki/… , pero sigue siendo un problema pendiente #2 que se implementará en geth.